用例-使用JFrog Bintray自动分发开源和私有组件

文摘:

艾伦·里斯和杰克·韦弗,雅虎!2016年5月:雅虎!使用Bintray来分发开源、闭源sdk和私有方构建。
看看我们为什么选择使用binary Enterprises,以及它给我们带来的优势,以及我们如何以低开销管理来自多个团队的项目。

讨论转录:

[艾伦]好吧。我是雅虎的艾伦·里斯。我在这里用JFrog的Bintray展示开源和私有组件的自动分发。我的同事Jack Weaver将谈论开源部分,我将谈论我们在Bintray做的私人聚会发行版。首先这是我们的安全港滑梯,我说的一切都是谎言。

[艾伦]好吧。我们将讨论如何使用Bintray。我们如何分发私有的构建,免费部署开源,然后与Travis CI一起部署到Bintray,这可能是最有趣的部分,然后我们会做一个问答。

[艾伦]那你为什么要用Bintray呢?有人想要使用-他想要为我们的内部Artifactory实例打开一个防火墙漏洞。它是针对单个构建的单个伙伴的。我们需要与这些人共享一些应用程序的构建副本。我们拒绝了他们。我们正在想办法解决这个问题。几周后,有人,我们最终与Bintray建立了联系,几周后,又有几个这样的人进来了,然后有人说,嘿,我想在Bintray上发布开源软件。事实证明,Maven中心设置确实很难完成。

[艾伦]我们和宾特雷的关系很不寻常。我们有很多人推动开源,也有很多人与承包商和第三方共享构建。我们称之为私人聚会建筑。它们只面向特定的客户,通常带有水印,只有一两次下载,不供公众消费。它们通常是移动应用程序。

[Allen]我们有——我们也有多个团队想要发布开源产品。Bintray要求您使用用户凭据来推送,或者如果您有企业授权,这在我们编写幻灯片之后已经改变了。他们增加了一些新的级别,所以你可以在更低的级别获得权利。既然我们不想控制用户和处理不同的用户,我们希望团队能够自己做。我们决定使用津贴。

[Allen]这是一些仓库的例子。你可以看到我们有合作伙伴a,我们有一堆大家都喜欢使用的JNI库,我们有Tachyon,我们的超级机密移动应用程序,而公开的那个实际上是Maven仓库。你会在那里找到Flurry SDK和省略库。

[Allen]那么,什么是私人派对?我说过了,它们是非公开的,它们是未发布的,我们不能让人们得到它们。因为它会漏水。我们要做的就是下载关键权利。所以下载密钥在24小时内有效,只能下载一次。

[Allen]这实际上运行得很好,我们和一些使用授权软件的人进行了交谈。他们发给用户一个许可密钥,用户可以下载四到五次,不管他们需要多少。一旦下载完成,你就不能再下载了。你必须联系技术支持来换一个新的。这就是我们处理它的方式,因为我们不希望有构建被泄露。我们希望一个人得到它,然后完成它。

[艾伦]我们每个消费者都有一个回购。我们为每个构建使用带签名的url。有效期为24小时。它们只适用于一次下载,如果你发行的是授权软件,你可能会说5次下载。

[艾伦]我们在发送之前用共享密钥加密。因为你不希望有人拦截你的邮件。对于我们的大多数用例,每个产品都有一个回购。这取决于你是在分发私人构建还是许可软件,你的做法可能会有所不同。你可以控制权利。有了这些权利,你可以变得很漂亮。你应该找支持谈谈。

[Allen]现在我们要和Jack一起做开源发行。

[杰克]先声明一下。大约两三周前,我离开了雅虎,所以我已经不在那里了。除了艾伦说的是谎话,我说的一切都是谎话。

[杰克]那么,我将很快地讲一些关于开源的事情,以及我们在雅虎是如何管理开源的。我们有企业-企业许可和设置,所以我们所做的不会是您的典型用例,因为我们确实使用下载密钥和授权。当Bintray第一次介绍这个的时候我们已经做过了。所以,你知道,天哪,就在Bintray的最尖端的功能是作为下载键引入的时候我们决定开始使用这些。我们把它应用到我们的开源软件中。

[Jack]所以我们的目标是,我们希望自动释放到Bintray中,减少手对手的接触,对吧?雅虎是一家大公司。我们是一个工具团队。我们只有这么多人,我们想要授权开源团队,那些拥有开源项目的人,在GitHub。com和雅虎,继续前进,你知道,发布他们需要的版本,但不必总是来找我们。

[杰克]这意味着,嗯,有几种方法。你想加入他们,所以我们想出了一种流水流程。我们有他们填写的表格,他们要通过表格,以便让他们登机。除此之外,我们实际上使用了一个独特的下载密钥应用程序,为每个项目和这些项目的授权。它的工作方式是,如果你现在访问Bintray。com / Yahoo,你会看到类似这样的图片。我们有我们的项目。这四个在这里是可见的。我们走过去,说,好吧,你想走了。你想在Bintray上创建你的包,你在GitHub上有你的源代码,我们将为你创建一个下载密钥,我们还将创建授权。每个项目都有一项权利。 And then I’m going to scope your entitlement, your download key to that entitlement.

[Jack]所以这就意味着我给你的访问和读写存储库的键是有范围的,它不适用于其他项目。这给了我们很多好处。首先,没有共享账户。因此,如果您想在使用下载密钥和权利之外这样做,您可能必须共享帐户凭据以获得从Travis CI发布的访问权限,例如,我将在一分钟内讨论。第二,我可以转动这些钥匙。如果很多项目的维护者或者拥有项目的联系人离开了,或者类似的事情,我们可以滚,好的。

[杰克]那么,你要怎么做呢?首先,你想创建你的密钥。很简单,所有这些都记录在Bintray的文档中。我不打算过多地讨论api,但我会展示一些示例。你创建了下载密钥,很简单。你基本上会说,嘿,这是我的密钥名,除此之外,你还需要向Bintray验证自己。这意味着,这是Bintray上base64编码的用户名和API密钥。我在Bintray上,我是一名管理员,你知道,我在这里。我在验证,这是普通的HTTP基本验证。就是这样。 You’re going to get back a response that going to give you your username. Don’t worry, this doesn’t exist. This key, this was just a test, I’ve deleted it since, so I’ve no problem showing the password up there. And that’s – that’s your key. Those are it, right. You’re good.

[杰克]第二部分。你想要创建权利。现在您已经有了密钥,您需要对该密钥进行限定,以便访问某个项目。在实际的身份验证方面基本相同,您还需要传入您的凭据。我已经把基本的猫编码好了,你知道的,关掉键。除此之外,你还会传递一些json数据。你想说重写或读或写。你想给它一些权限。最后你会说你想要对哪个键应用访问权。

你会注意到在URL中,我实际上一直到hello Bintray。所以软件包,雅虎Maven,你好Bintray。你好,宾托,那是我的宾托。所以我们有一些其他的,你知道,雅虎内部的客户或团队在GitHub上有一个开源项目。他们所做的就是为他们创建那个包,我们——你好,Bintray——然后我们继续创建这些密钥,并将它们直接作用域到那个包中。他们有下载密钥。前一步中的用户名和密码。我们创建了这个作用域部分,使下载键能够继续进行重写访问。当然,你会回来的,你知道,你的2011年回应创建,一切都很好。

[杰克]那么,有趣的部分来了。我们得从CI处着手。在雅虎,我们有内部CI系统,我们一直在开源中构建和使用,所以常见的用例是使用Travis。所以Travis CI很有名,很受欢迎。我要讲的是如何在Maven中设置它。你可以用Gradle轻松地完成所有这些工作。Maven是我们唯一的选择。

[杰克]一旦设置好了,你就得做几个决定。一个是:你想控制你的部署过程吗?提交会进入你的GitHub仓库。你在某个时间点做了一个发布的决定。到那时,你可以使用Maven发布插件。你运行这个命令,它给代码打上标签,然后发送给Travis, Travis看到这个标签,Travis使用我们从下载密钥中给它的凭证,然后把这个包推送给Bintray。这就是整个系统的运作方式,你们会在以后的幻灯片中看到。

[Jack]所以你要做的一件事就是把你的证书交给Travis CI。你是怎么做到的?有两种方法。这是Travis CI的用户界面截图。如果你进去,你可以设置Bintray用户和Bintray API密钥。它会在运行时加密这些数据。现在,当您的项目运行时,您将拥有可以从Maven引用的环境变量,以获取用户API。

[Jack]第二种方法是使用命令行,Travis CI命令行工具。你给它一个命令,你告诉它你的用户名和密码是什么,它实际上加密这些和存储在你的特拉维斯yaml文件。最后你会看到下面这两条安全的线,它们用黄色突出显示,在幻灯片上看不太清楚。我建议采用第一种方法,但是,你知道,有两种方法可以做到这一点。

[Jack]另一个组件是Maven需要知道该做什么。正确的。很简单,很直接。既然已经有了这些环境变量,并且它们在构建时就存在了,那么就可以从设置XML中引用它们了。因此,您创建了一个settings。XML文件,并将其传递给Maven。Env点,它引用了在构建时从Travis可用的环境变量。这和我们之前加密的是一样的。Bintray用户,Bintray API密钥,Bintray用户,Bintray API密钥在设置中。这意味着你的用户名和密码不会暴露在任何地方。它是秘密的,隐藏在Travis内部,当然我们已经为Bintray做了管道后端,所以这个键实际上可以访问我们想要在Bintray中的包。 And then the next thing is, you need to point your distribution. You got to point Maven to where the distribution’s at. I used a example project that we had at Yahoo called Omid. And the full, you know, it’s API dot Bintray dot com Maven Yahoo Maven Omid. Pretty straight forward.

[杰克]现在有趣的部分来了。你想要释放。所以你有一个团队,你知道,开发人员,他们已经通过,他们已经接受了很多拉取请求,他们来来回回。也许他们正在朝着一个里程碑努力,诸如此类。现在他们做出决定,嘿,我想做一个释放。到目前为止,我在这里展示的都很好。特拉维斯不会放人的。它不知道这些。它只知道它在建造。正确的。 Basic Maven, Maven clean install, basic build. You can tell Travis to do a Maven prepare release, Maven prepare and it will go ahead and release that into Bintray. You can do that, but then that means that you’re doing releases on every commit. You probably don’t want that.

[Jack]所以你要做的就是让你的开发人员在签出时运行Maven发布插件。所以项目的一个维护者把代码放在他们的笔记本电脑上,在一个开发者盒子里,他们决定做一个新的发布,在那个时候,你可以使用Maven发布插件。它会标记它,它会改变版本,它会增加你到下一个开发周期。所以大小补丁,那个补丁版本会被撞。这样你就能很好地完成任务了。

[Jack]当它到达Travis时,你可以在你的Travis文件中设置,当你看到我们被标记时,他们会进行Maven部署。顺便说一下,在运行部署时使用设置文件。接下来发生的是,Travis会看到这个,它会抓取任何从这个标签构建的东西,它会继续把它发送给Bintray。这就是你的解脱。这是一种方法。有很多方法可以做到这一点。

[Jack]我在这里强调的是Maven发布准备从Travis运行的命令。这是一种方法,还有另一种方法。否则,作为一个普通的开发人员,您将在笔记本电脑上进行发布准备,然后再一次配置Travis以匹配该标签号。你可以给它一个正则表达式。你可以对特拉维斯做很多事。剥猫皮的方法有很多。

[杰克]这就是你最终得到的。这是一幅很大的,框框和线条的图画。一开始,你有你的开发者。他将从他的笔记本电脑上运行Maven发布准备。这些提交将会进入Git。其中一个会有版本号标记在里面。而您在另一端告诉Travis的是,嘿,看,构建它,在它成功之后,如果标签匹配此正则表达式,则继续执行Maven部署。然后,在它运行Maven部署之后,您所完成的项目上的所有二进制文件都会进入Bintray。它知道使用您的凭证,您已经配置好了。所有这些都在包的内部,所以你不需要团队去尝试,你知道,没有恶意的活动。 Right? It would be very difficult for them to try and pull that off. On the consumer end of that, your consumer just configures their Pom to use it […].

[杰克]我有一些临别的想法。一是我们的用法有点不正统。我们正在为开源使用企业特性。我知道很多开源组织不会有下载密钥,或者它们现在被称为访问密钥,名称已经改变了。我告诉过你们雅虎刚开始使用这个的时候,它们被称为下载密钥。当他们第一次发布这个功能时,我们就开始使用它了。那是几个月前的事了。它们不叫访问键。同样的事情。

[杰克]如果你没有进取心,你也可以这样做。有几件事你需要考虑。一是你可以在Bintray中创建一个专用帐户,然后你可以在你的项目中使用该帐户凭证,并将该帐户添加到你的Bintray组织中。你准备好了,可以开始了。如果你只是在你的开源项目上工作,那么你没有理由不把你自己的证书放在那里。用同样的方法给特拉维斯加密,一切都一样,你就搞定了。

[Jack]使用下载键真正给你带来的是这种无头的方法,可以尝试对你的repos进行读写访问,这是Travis为了发布而需要的。好处是你可以完全自动化或者部分自动化。就像在我展示的图表中的任何一点,你可以做出决定,你知道,继续自动化或者你可以在那个时候把人放在循环中。

[John] Bintray允许你将发布包或者二进制文件推送到Bintray包中,但还没有向公众公开。所以作为一个选项,如果你想,你实际上可以推入工件,只有当你准备好做一个发布时,你才决定你想要真正的,你知道,发布或丢弃哪些。所以这里有很多选择。

[John]我的建议是,我看到很多开源项目,其中一些实际上是在使用GitHub来存储他们的产品。我认为Bintray是非凡的,因为它真的很容易使用,最重要的是,你可以链接到JCenter,这就像你连接到其他所有人的简单方式,所以如果你的消费者使用Maven或其他任何东西,他们不需要在他们的Pom xml中提供特殊配置。这是一个很好的小系统。我认为它比目前可用的要好,你知道,你可以自动化很多端到端。所以。

[艾伦]好吧。谢谢。很感激。

要么释放,要么死亡