用例-使用JFrog Bintray自动分发开源和私有组件
文摘:
艾伦·里斯和杰克·韦弗,雅虎!2016年5月:雅虎!使用Bintray来分发开源、闭源sdk和私有党派构建。
看看我们为什么选择使用二进制企业以及它给我们带来的优势,以及我们如何以较低的开销管理来自多个团队的分发项目。
讨论转录:
[艾伦]好吧。我是雅虎的艾伦·里斯。我在这里用JFrog的Bintray演示开源和私有组件的自动分发。我的同学Jack Weaver会讲开源的部分,我会讲我们在Bintray做的私人派对分发。首先,这是我们的安全港滑梯,我说的一切都是谎言。
[艾伦]好吧。我们将讨论如何使用Bintray。我们如何分发私人聚会构建,免费部署开源,然后与Travis CI一起部署到Bintray,这可能是最有趣的部分,然后我们会做一个问答。
[Allen]那你为什么要用Bintray呢?有人想要使用——他想为我们的内部Artifactory实例打开一个防火墙漏洞。这是针对单个构建的单个合作伙伴。我们需要与这些人共享一些应用程序的构建副本。我们拒绝了他们。我们正在想办法解决这个问题。几周后,有人,我们最终建立了Bintray,几周后,又有几个人进来了,然后有人说,嘿,我想在Bintray上发布开源。事实证明,Maven的中心设置真的很难做到。
[艾伦]我们在Bintray上有一个不同寻常的设置。我们有很多人推动开源,然后我们有很多人与承包商和第三方共享构建。我们称之为私人聚会。它们会被送到特定的客户那里,通常都有水印,只有一两次下载,它们不是供公众消费的。它们通常是移动应用程序。
[Allen]我们有——我们也有多个团队想要发布开源工件。Bintray要求你使用用户凭证来推送或者如果你有企业授权,这在我们写完幻灯片后已经改变了。他们增加了一些新的级别,所以你可以在更低的级别获得权利。因此,由于我们不想控制用户和处理各种用户,我们希望团队能够自己做这些事情。我们决定使用福利。
[Allen]这是回购的一个例子。你可以看到我们有合作伙伴a,我们有一堆大家都喜欢使用的JNI库,我们有Tachyon,我们的超级机密移动应用程序,而公开的实际上是Maven repo。在那里你可以找到像Flurry SDK和省略库之类的东西。
[艾伦]那么,什么是私人派对?我看了一遍,这些都是非公共建筑,没有发布,我们不能让别人拿到。因为它会漏水。所以我们要做的就是下载密钥授权。所以下载密钥是有效的24小时和一次下载。
[Allen]这实际上工作得很好,我们和一些正在用他们的授权软件这样做的人谈过。他们向客户发送一个许可密钥,就可以下载4到5次,不管他们需要多少次。一旦下载完成,你就不能再下载了。您必须联系技术支持人员购买一个新的。这就是我们处理它的方式,因为有我们不希望泄露的构建。我们希望一个人得到它,然后完成它。
[艾伦]我们对每位消费者有一次回购。我们对每个构建都使用签名url。24小时后失效。它们只对一次下载有效,如果你发布的是授权软件,也许你会说5次下载。
[艾伦]我们在发送之前用共享密钥加密。因为你不想让别人拦截你的邮件。对于我们的大多数用例,每个产品都有一个回购。这取决于你是在分发私人版本还是授权软件,你可能会有一些不同的做法。您可以控制权限。你可以得到相当[…]的权利。你应该找后勤人员谈谈。
[艾伦]现在我们要和杰克一起做开源发布。
[杰克]免责声明。大约两三周前,我离开了雅虎,所以我不在那里了。除了艾伦说的都是谎话,我说的也都是谎话。
[杰克]所以我——我要讲一些关于开源的简单事情,以及我们在雅虎是如何管理开源的。我们有企业-企业许可和设置,所以我们所做的不会是典型的用例,因为我们使用下载密钥和授权。在Bintray第一次介绍这个的时候我们已经做过了。天啊,当它是Bintray最尖端的功能时我们决定开始使用它作为下载键。我们把它应用到我们的开源软件中。
[杰克]所以这里的目标是我们想要自动发布到Bintray中,并将手与手的接触最小化。雅虎是个大公司。我们是一个工具团队。我们只有这么多人,我们有点想授权开源团队,那些拥有开源项目的团队,在GitHub。com和雅虎,继续前进,你知道,发布他们需要的版本,但不必总是来找我们。
[杰克]这意味着,有几种方法。你想加入他们,所以我们想出了一种流水线流程。我们有他们填写的表格,他们要通过,才能让他们登机。除此之外,我们实际上使用了一个独特的下载密钥应用程序,为每个项目和这些项目的授权。它的工作方式是,如果你现在去Bintray。com / Yahoo,你会得到一个类似的图片。我们有自己的项目。这四个是可以看到的。然后我们说,好吧,你想来吧。你想在Bintray上创建你的包,你的源代码在GitHub中,我们会为你创建一个下载密钥,我们也会创建授权。这些权利是每个项目都有一个。 And then I’m going to scope your entitlement, your download key to that entitlement.
[杰克]所以这意味着我给你的键,读取和写入你的存储库是有范围的,它不会对其他项目起作用。这给了我们很多优势。首先,没有共享账户。因此,如果你想在使用下载密钥和授权之外做到这一点,你可能必须共享帐户凭证以获得从Travis CI发布的访问权限,例如,我将在一分钟内讨论。第二,我可以滚动这些钥匙。如果很多项目的维护者或者是拥有这个项目的联系人离开了,或者诸如此类的事情,我们可以继续。
[杰克]那么,你要怎么做呢?首先,你想创建你的密钥。很简单,这些都记录在Bintray的文档中。我不会过多地讨论api,但我会展示一些示例。你可以创建你的下载密钥,这很简单。你基本上会说,嘿,这是我的密钥名,除此之外,你还必须向Bintray验证自己。这意味着,这是base64编码的用户名和我在Bintray账户的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。hello Bintray部分,这是我的Bintray包。所以我们有一些其他的,你知道,雅虎内部的客户或团队在GitHub上有一个开源项目。他们所做的是我们为他们创建那个包,你知道,你好,Bintray,然后我们继续创建这些键,并将它们直接定位到那个包中。他们有下载密钥。前一步中的用户名和密码。我们创建这个作用域部分,授权下载键继续使用重写进行访问。当然你会得到,你的201响应创建好了,一切都好了。
[杰克]那么,有趣的部分来了。我们得从CI那里搞定。在雅虎,我们有内部CI系统,我们一直在开源中构建和使用,所以常用的用例是使用Travis。Travis CI非常有名,很受欢迎。我要讲的是如何用Maven来设置它。你可以用Gradle轻松地完成所有这些事情。Maven只是我们的一种选择。
[杰克]一旦设立好了,你就得做几个决定。一个问题是:您是否希望控制部署过程?提交会进入你的GitHub repo。你在某个时间点做了一个决定来发布。在这一点上,你可以使用Maven发布插件。你运行这个命令,它标记代码,它发送给Travis, Travis看到这个标记,Travis使用我们从下载密钥中给它的凭据,它将这个包推送到Bintray。这就是整个系统的运作方式,你们会在以后的幻灯片中看到。
[Jack]所以你要做的一件事显然就是把你的证书交给Travis CI。你是怎么做到的?有两种方法。这是特拉维斯CI的用户界面的截图。你可以在里面设置Bintray用户和Bintray API键。它会在运行时加密。现在当您的项目运行时,您将拥有可以从Maven引用的环境变量来获得用户API。
[Jack]第二种方法是使用命令行,Travis CI命令行工具。你给它一个命令,告诉它你的用户名和密码,它会加密这些并存储在Travis 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发布插件。它会标记它,它会碰撞版本,它实际上会增加你到下一个开发周期。所以major-minor补丁,这个补丁版本会被取消。它让你看起来很漂亮很整洁。
[杰克]当它到达特拉维斯时,你可以在你的特拉维斯文件中设置,嘿,当你看到我们被标记时,就进行Maven部署。顺便说一下,运行deploy时使用设置文件。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组织中。你已经准备好了,可以开始了。如果你只是在开发你的开源软件,你没有理由不能把你自己的凭证放在那里。用特拉维斯同样的方式加密,一切都差不多,你就万事通了。
[杰克]使用下载密钥真正给你带来的是这种无头的方法,试图对你的回购进行读写访问,这是特拉维斯为了发布而需要的。好处是你可以完全自动化或部分自动化。就像在我展示的图表中的任何一点,你可以做出决定,你知道,继续自动化,或者你可以在那个点上让人类参与进来。
[John] Bintray允许你实际地将软件包或二进制文件推送到你的Bintray包中,但还没有向公众公开。作为一种选择,如果你想,你可以推入工件,只有当你准备好发布的时候才决定你想要什么,你知道,发布或丢弃。这里有很多选择。
[John]我的建议是,我看到很多开源项目,他们实际上在使用GitHub来存储他们的工件。我认为Bintray是现象级的,因为它非常容易使用,除此之外,你可以链接到JCenter,这就像你连接到其他所有人的简单方式,这样你的消费者就不需要在Pom xml中提供特殊配置,如果他们使用Maven或其他东西。这是一个很好的小系统。我认为它比目前可用的东西更优越,你知道,你可以自动化很多端到端的工作。所以。
[艾伦]好吧。谢谢。很感激。
