用例-云原生Java开发人员的持续交付
文摘:
Josh Long / Pivotal & Baruch Sadogursky /JFrog, 2016年5月:组织努力加快行动。他们正在转向更小批量的工作,微服务,他们可以更快地通过软件工厂。
当且仅当开发周期下游的一切都是运转良好的自动化机器时,微服务才能支持敏捷性。在本次演讲中,我们将与JFrog开发人员倡导者Baruch Sadogursky和Spring开发人员倡导者Josh Long一起探讨如何快速编写微服务,并将其通过由Artifactory和CloudFoundry提供支持的持续交付管道。
讨论转录:
[Josh]所以我们要做的是,我认为首先,这次讨论的重点,你知道,Baruch和我都对敏捷性非常感兴趣,帮助开发人员快速得到结果,所以我们今天要做的是构建一个非常非常简单的应用程序。非常非常简单。我通常只关注应用程序开发,所以我们会从这个开始。但我们很快就会看到,这远远不够。所以这里的目标是让我们有能力快速前进,对吧,我们将从代码开始。代码很重要,我们来看看我第二喜欢的地方。
[Baruch]所以Josh现在要做的是他以前做过很多关于Spring Boot和微服务的演讲。
乔什:只要10分钟。
[巴鲁克]他将在10秒内完成,而不是45分钟。
[乔什]会没事的。
(巴鲁克)10分钟,因为你太犀利了,也因为我让他来这里实际上是为了说一件事。你在这次演讲中所做的非常棒,但这还不够。
乔什:还不够。
[巴鲁克]首先,这是我第一次可以用麦克风告诉你们,而不是在人群中大喊大叫。
(杰克)是的。
巴鲁克:那我们就这么做吧。做你该做的,然后我们再进一步。
[Josh]我们将从start . spring . io开始我们的生产之旅。
乔什:这是我在互联网上第二喜欢的地方。如果您还没有投入生产,那么您肯定应该投入生产。我喜欢制作。你应该热爱生产。生产的。每年这个时候的产量都很高。天气很好。如果你还没去,你应该去,带上孩子和家人。制作比迪士尼乐园好。
[Josh]我们将从start。spring。io开始我们的旅程。如果你想在清晨喝杯茶或咖啡之前获得灵感,从点spring点io开始吧。如果你的孩子不安分,睡不着,开始点春天点io。如果你患有消化不良,想要缓解,就开始点spring点io。
[Josh]我们要做的是建立一个非常简单的服务。我们将把它称为cdlive,我们将利用一些支持快速构建应用程序的技术。我们将在这里使用Spring的web支持。当然,如果我们愿意,我们也可以选择切换到完整的版本在这里我们会看到一系列的复选框。我们可以用不同的东西来支持不同的技术和用例。除了网络技术,我们不想选择其他任何东西。我们还可以选择语言,同样,JVM上任何带有对象和注释的语言都可以正常工作。Scala, Java, Groovy, Kotlin等等。然后这里,最后,我们有我所谓的非选项。这些都是选择,就像脱光衣服和在车流中奔跑也是一种选择一样。 You could make those choices but — but don’t. Please don’t.
[Josh]例如,这里我们有我们想要使用的JVM版本。在2016年,除了1点8以外,其他的都不是一个好的选择。这里有一个问题,一个人们经常纠结的选择,我将尽我所能冷静地解释何时何地选择哪个选项,就在这里,此时此刻。
[Josh]如果你发现自己被困在非常非常遥远的过去,远远超出了现代的帮助,那么选择。war。但是如果你在这里,和我在一起,在2016年,那么选择。jar。这是我个人指导思想的重要组成部分,即制造争端而不是战争。你有选择。你有选择。你应该做适合自己的事。
[巴鲁克]首先,没有结果。
[Josh]没有结果?没有结果是什么意思?
[巴鲁克]它说没有结果。我不知道。
(杰克)好。
[巴鲁克]第二,谁会真正想选择战争呢?
[乔什]来自遥远过去的人们。
(巴鲁克)残忍的、追求战争的私生子会选择战争吗?
乔什:不知道。所以我们要把它打开。我们这里有个小项目。我要做的就是在这里打开一个令牌稻草人REST API。如果IDE想玩。出来吧。这里用什么并不重要。我只想找到一个可以迭代的点。或者我们可以在上面迭代。
乔什:把这个打开。来吧。来吧。Cdlive应用程序。其他控制器。好的。
[Josh]我们要在这里建一个简单的端点。公共字符串hi。路径变量字符串。实际上我们甚至不需要这个。我们在这里画一个端点。我所要做的就是公开一个端点,它响应名为GET的HTTP谓词,并以正斜杠hi响应。好了。
[乔什]当然这需要测试。我在这里写一个简单的单元测试。我说的是私有web应用程序上下文。WAC。或者更好的是WAC。我将告诉Spring将该对象作为协作对象提供,如下所示。然后我将创建一个mockMvc对象,我可以使用它来与我的REST API交互,而不需要实际站起来整个服务。我之前说的是public void。我说这个。mockMvc等于mockMvcBuilder。with web application context bot build。然后用at before作序。 And we’ll create a simple test just to prove that when I evoke that endpoint, I’ll get a result.
[Josh]所以这个。mockMvc。perform。MockMvc请求生成器。get hi。expect mockMvc result matchers。content。或者说status is ok, expect new result matcher。基本上就是获取内容。获取响应为字符串。好的。点等于hi。好的。
[乔什]这将是我们的简单测试,这样当我们改变它时,我们就有了一个基线,我们可以看到会发生什么。所以assert =。我们这里不需要这个。好的。这是一个简单的测试。如果我们运行这个,我们会发现我们可以解决这个问题。让它更干净一点。几乎像Groovy,但不完全像。
[Baruch]我只想说,如果你需要一个用Groovy编写的理由,看看这段代码就知道了。
(杰克)是的。好,谢谢。所以。
(巴鲁克)不是因为你。这是因为Java。
(杰克)好。它通过了吗?好吗?它跑了,但那不是我想要的。请进行测试。测试嗨。好的,它通过了,我们可以证明负数-我们可以通过把它变成负数来证明正数,就像这样。再运行一次。
[巴鲁克]那是突变测试。这是。
[Josh]失败了,当然,这是错误的端点。我们也像这样。
(巴)难以置信。
(杰克)好。这是一个非常简单的应用。非常简单的测试。我们知道这是我们需要的。现在我需要做什么?[…]
(巴)是的。你想把它提交给Git?
乔什:我认为这是个好主意。这是个好主意。
(巴)GitHub吗?是吗?
我们旅程的开始。我做了什么?我不可挽回地把它弄坏了。
(巴)是的。这是所有。你把它弄坏了。
[乔什]我去哪儿了?
巴鲁克:我们回家吧。
乔什:等等。断言。
(观众)
(巴)是的。你进行了测试。只是重新运行它。是的。运行测试。
(杰克)哦。谢谢你!你一定有这么聪明才会坐过山车。
(巴)是的。这是[…]。他很聪明。
(杰克)好。很好。谢谢你!现在我有了代码。我把它写在这里。在GitHub的某个地方。
[Josh]所以,今天我们要看看Bintray, Artifactory, GitHub, Travis,嗯
(巴)春天。
[Josh] Cloud Foundry并启动dot spring dot io。所有这些都在网络上。都是活的。所以,希望这次演讲没有问题但是这里有很多变量。所以新的存储库
(巴鲁克)一切都会好的。刚刚好。
乔什:一切都会好起来的。可能更糟。
(巴鲁克)这将是完美的。
(杰克)。我们会说cdlive。好的。好的。我们会现场直播。
巴鲁克:我们会现场直播的。一个许可证。我们需要东西。
乔什:差不多吧。好了。
(巴)是的。
(杰克)好。为什么我们不快乐?
我做错什么了吗?
巴鲁克:你没有找零吧?是的。现在你做出了改变。
[乔什]那很有帮助。谢谢你!我们复制这个URL。进入命令行。Cd桌面。Git克隆。来吧。得更快。
[巴鲁克]这是一个沉重的工程。
(杰克)是的。清楚。Cat点git配置。PB。把它复制到这里。那么我们的代码在哪里?下载。Cdlive。Git init。从桌面复制。 Cdlive dot git config to the downloads directory. Cdlive dot git config. Git. And we’re inside of the downloads directory. So Git status. Git add. Maven w. Git add source. Git add Pom dot xml. Git status. Do I need anything else?
(巴)。但Maven ?你想让我们,你想让这次谈话尽量让人痛苦。对吧?
(杰克)是的。绝对的。所以Maven。Maven。因为我做出了糟糕的人生决定。
(巴鲁克)你不能在街上裸奔。选择Java 8。你没那么坏。
乔什:那就足够了。对吧?我得拉一下。因为我有自述书在里面。好的。太好了。Git推动。好了。我们做完了,对吧?肯定。
(巴)。好工作。是的,干得好。但是现在,你要怎么做呢?
回家吧。喝葡萄酒。
[巴鲁克]然后呢?你难道不想,比如,运行一些持续集成来检查你不会偶尔破坏它吗?
乔什:我从不犯错。巴鲁克。
[Baruch]你刚刚谈到了你的代码中存在的bug的数量。难道你不想
乔什:好吧。嗯好的。也许你是对的。也许一些反馈是好的。
巴录好了。今天很简单。只要把特拉维斯的yaml文件放进去,你就搞定了。
[Josh] Travis是什么?
[Baruch] Travis是一个云——它是一个云上的CI服务器。它只需要你的GitHub存储库。观察,当你添加box到它,它运行构建,它失败了,这就是你知道你今天犯了多少错误。
[Josh]所以这是持续的反馈。是什么?
[巴鲁克]这是不断的倒退。比如倒数。你又开始数了。
乔什:但是,我不会犯错误。不,它失去了Git的功能。搞什么鬼?
[巴鲁克]第一个不是Git吗?
[Josh]启用ver - Git。
(巴)。好的。你没有Git。这是- - - - - -
[乔什]随便吧
巴鲁克:让我们换一个版本吧。
[Josh] Git状态。Git添加点Travis yaml。Git提交。YOLO。意思好的。
[巴鲁克]这是一个很好的信息。
[乔什]Git推。好的。
[巴鲁克]信息很重要。
乔什:所以现在我们有了一个连续的——我们有了特拉维斯。我还需要什么?
巴鲁克:现在你需要把它打开。
[Josh] Travis CI。Travis CI dot org。
[巴鲁克]Dot . org。
(杰克)好。我们从这里开始。
[巴鲁克]用。这么说你认识崔维斯。这里有大量的存储库。
乔什:有一些。
(巴)是的。
[Josh]那我们的——我们在哪里加的?Cdlive吗?
巴鲁克Cdlive。
乔什:已经开始了。所以请关掉以防万一。好的。
巴录好了。现在让我们看看它是否有任何新的构建。
(杰克)回家。
Baruch:应该有一个新的版本,对吧?我猜。
乔什:我们什么都没改变,不是吗?
(巴鲁克)不,我们没有。
(杰克)大三角帆。
(巴)大三角帆吗?你在空闲时间制作三角帆?你,你是个罪犯?
(杰克)好。好了。更新,这是旧的。所以我们现在需要
(巴)是的。[…]。
[Josh] -确保更新。
(巴)是的。让我们想象一下我们要现场直播。
什么?
[Baruch]“我们会现场直播”的动图。[…]。
(杰克)好。TBD。
巴录好了。
(杰克)O ' reilly
[巴鲁克]这就是添加图像的方法。只需要添加图片的TBD即可。
(杰克)好。
(巴)好。
[Josh]我不明白的是为什么Git不再做这个了?毫不夸张地说,Git插件在外面的走廊上工作。但鉴于我们现在是在直播。
(巴)。我们没有subversion和ClearCase以及其他很酷的东西。但是。
[Josh]加上
(巴鲁克)你在Maven,你不能抱怨。
乔什:是的,我知道。
[Baruch]颠覆应该是你的底线。
[乔什]Git推。所以现在。来吧。
巴鲁克Cdlive。Cdlive。Cdlive。不。没有cdlive。
乔什:这个和旧的有点联系。
(巴)是的。我想我们应该创建一个新的回购。怎么样?
[乔什]有道理。或者我们可以重命名它?
(巴)。我认为你只需要创建一个新的回购。
[乔什]哦,这里。
巴鲁克克隆。副本。是的
(杰克)。
巴录好了。Cdlive。
乔什:可能还好。现在回到这个。到这里,添加一个存储库。
(巴)[…]
我又活过来了。这次是在Gusto之前。
(巴)刷新。
(杰克)重新同步。
(巴)是的。
(杰克)重新同步。
(巴鲁克)我们会做到的。
乔什:我们还有多少时间?[…]
巴鲁克:我们才刚刚开始。我不知道。大概五分钟。上衣。
[乔什]什么时候——不,说真的——我们什么时候开始的?
(巴)35。
(杰克)好。我们有的是时间。白色的步骤。所以重新开始生活吧。
(巴)。开始吧。
乔什:祝你好运。
(巴鲁克)好吧。现在我们需要一个图像。或者删除TBD。现在删除TBD。
(杰克)好。在Reddit上获得额外的验证。
[巴鲁克]是的,这很重要。
(杰克)好。Git推动。
[巴鲁克]你的信息一点创意都没有。
(杰克)快。
[巴鲁克]这是一个很好的答案。
乔什:这是终极。是耸肩。它在哪里?
[巴鲁克]是的,在哪里
我又活过来了。
(巴)。
(杰克)好。
[巴鲁克]现在它在建造。哈利路亚。一号已经开始了。兴奋。
乔什:那现在怎么办?这给了我什么?
巴鲁克:现在你有了。即使它会失败,你知道,你把它加回来,就像你通常做的那样。但是,有藏物吗?你把它们扔掉了?你没意见吧?
(杰克)没有。我希望能够使用-
[巴鲁克]-你想留住他们-
[乔什]-又来了,对吧?
(巴)。
乔什:所以这将被投入生产。我们的目标是投入生产。我如何改变我现在得到的只是一个反馈机制,并使我的持续集成成为一个实际的渠道直接生产?
[巴鲁克]第一步是把藏物放在某个地方。不要把它们扔掉。
[乔什]所以
[Baruch]你知道一个好的存储库可以用来保存你的二进制工件吗?
(杰克)Artifactory吗?
[巴鲁克]听起来不错。你是根据名字猜到的,对吧?
[乔什]我应该
(巴)工件。Artifactory。
乔什:我应该改一下。我应该添加插件吗?设置Maven发布插件?
[Baruch]那你为什么要发布插件呢?快照有什么问题?
乔什:那么,如果我没有发行版本,我该怎么发行呢?
[巴鲁克]哦,是的。然后是Maven发行版。它会失败,它会做很多Git的事情,它会再次失败。这就是方法。
[Josh]那么现在我在做这件事的时候应该考虑版本控制的方式有什么不同吗?
巴鲁克:你不想拍快照?
乔什:我想要。我想要一些可以释放的东西。这就是这里的目标:拥有每个有效的构建[…]-
[Baruch] -放弃快照。使用发布版本。
(杰克)好。
[巴鲁克]你可以把建造号作为版本,怎么样?
(杰克)好。比如特拉维斯?我能发布一些有用的东西吗?
[Baruch] Travis - Travis构建号是一个完美的发布版本。
(杰克)好。让我们改变这里的构造。然后移动到属性。比如build。version,我们会在这里创建。
[巴鲁克]听起来不错。
[Josh]版本会是build。version甚至是一个。哦哦快照。对吧?
(巴鲁克)好吧,我们不在乎这个。这只是后备方案。如果没有找到变量。但它会被找到,因为我们使用Travis变量。
[Josh]所以我们要在命令行上重写这个?
(巴)。
[Josh]当我们创建Travis构建时。所以,在这里?
(巴)是的。
(杰克)脚本。Maven。W减d。我刚才说了什么?构建点版本。
[Baruch]建立点版本。
(杰克)好。平等的。这里我要作弊一下。想要自信的时候还是——
[巴鲁克]这是特拉维斯的建造号。
[乔什]像这样?
(巴)是的。像这样。你打得很快。
(杰克)复制。我作弊。我们作弊吧。
(巴鲁克)他们没有——没有人注意到。
(杰克)好。现在我得到了一个更新的构建。要做的,
[巴鲁克]但是——你仍然没有部署你的神器。你打算如何部署他们?
(杰克)魔法吗?什么才是正确的想法?我可以使用Maven[…]插件吗?
(巴鲁克)你可以——你可以。你有两个选择。你可以使用标准的Maven部署插件来完成分发管理部分。
[Josh]为什么不呢?
[巴鲁克]这很好,但也有两个缺点。首先,你需要在你的主目录下的settings xml中配置你的用户名和密码。你在特拉维斯有主目录吗?
[乔什]哦对。好点。不,我——
(巴鲁克)不,你不需要。
[乔什]我怎么得到这个?
(巴)好。另一个地方。坏的。另一个地方。Maven。另一个缺点是,您只是将愚蠢的文件部署到Artifactory,而没有任何元数据。这就是解决方案。您可以使用Artifactory Maven插件。Artifactory Maven插件解决了这两个问题。它将提供一个建筑[…],但它也让你能够从xml输入用户名和密码的明文。 How that sounds?
[乔什]甜美的甘露。
(巴)。听起来是个糟糕的主意。
(杰克)没有。
[巴鲁克]但你能做的是使用环境变量,然后它是——你的意思是,你是说甜蜜吗?
(杰克)甜。
巴鲁克甜。
(杰克)甜。
(巴鲁克)那太好了。
[Josh]你知道我——你知道我最喜欢Artifactory的Maven插件的哪一部分吗?
(巴)是的。
[Josh]它单凭一己之力就让我把代码行数翻倍了。
(巴鲁克)那是
乔什:还有我的项目。
[巴鲁克]那是美芬魔法。
[Josh]那是Maven。
[Baruch]任何Maven插件都有500行xml。
(杰克)好。你准备好了吗?
(巴)是的。让我们。哦。那就是它了。正确的。好吧。这是Maven。
(杰克)是的。
(巴鲁克)最好的时候。
(杰克)。
巴鲁克:就像爆炸声。你是今天GitHub的顶级提交者。
[乔什]我拿到了我的[…]
你今天提交的代码行数最多。
[乔什]我的[…]。看起来它需要一个Artifactory用户名和密码。
[Baruch]这就是我们将在Travis中使用的环境变量。
[乔什]那我该让他们闭嘴吗?
[巴鲁克]现在让我们把他们加到特拉维斯身上。
乔什:所以这很有效。这很好。
巴鲁克:是的,但他们什么也没做。你把所有的藏物都扔了。
[乔什]起飞-
(巴鲁克)我现在不喜欢你。当你把藏物扔掉的时候。
乔什:我还没登录。我是吗?
[Baruch]您已登录。
[乔什]但是,场景在哪里?
[巴鲁克]然而,你没有选择。这是你的账户。你是乔希。
(杰克)是的。好吧,希望如此。
巴鲁克:至少我们希望如此。
(杰克)啊。设置。
(巴鲁克)来吧。
乔什:你看到了吗?
(巴)是的。魔法。
乔什:好吧。Artifactory
(巴)用户名。
[Josh]用户名等于admin。
(巴)管理。不错的选择。
[Josh]和猫Josh emv握Artifactory密码
[Baruch]和API密钥。是的,我们有API之类的。
[Josh]握力减去I. API。收到了吗?
(巴)副本。是的。看看它是否复制了什么。它做到了。
[乔什]真是个混蛋。
(巴)是的。但这不是我们真正想要的。
[乔什]没关系。我们可以用这个。
(巴)是的。不。好吧。是的。听起来不错。我们使用稍后会唤起的API键。
乔什:马上。即使它被截断了,我们仍然会撤销它。所以,不知道。
(巴鲁克)现在安全了。
乔什:你不能访问我非常私密、非常重要的演示版本。
[Baruch]一个Artifactory实例,但是你现在需要将环境变量改为Pom xml,因为我们使用了另一个。没有密码。但是,对,就是那个。走了。把它带到Pom。
乔什:这里。
(巴)。正确的。这里。
乔什:现在怎么办?
巴鲁克:一流的。好的。那么现在我们有什么现在让我们,让我们看看我们有什么。这就是简洁的Artifactory插件。正确的。以及它会做什么。它会执行发布。这需要崔维斯的投入。例如,它将添加关于文件的元数据。这将是特拉维斯的承诺。 It will go into cloud native Java Artifactory online dot com. That’s your Artifactory account from the cloud.
乔什:这是JFrog的人慷慨地给我的。眨眼。
巴鲁克眨眼。用户名和密码。我们将把这些artifact放在leap stage local中。为什么是分期?
[乔什]我。我不确定。
(巴鲁克)因为我们想要上演他们。
(杰克)好。
(巴鲁克)怎么样?对吧?我爱死他了。他很聪明。
乔什:这又回到了我犯错的想法上。
(巴)。然后。完全正确。然后我们将添加更多关于构建的信息。比如是谁建造的。特拉维斯。我们要建立什么。建筑号是多少?构建数字。网址是什么-崔维斯的网址。 Who’s the user? The user in Travis. And what was the commit. We commit it so earlier. So that’s the metadata that’s going to come from Travis, to Artifactory where it’s going to sit.
[乔什]他们增加,然后建造。
(巴)是的。基本上我们已经准备好将一些文件放入Artifactory。
[Josh]我也想建立和解决我的依赖关系[…]。
[巴鲁克]是的,是的。这是一个很好的观察。现在,Maven在默认情况下如何解析依赖项?
[Josh]它不是去设置。xml吗?
[巴鲁克]那里有什么?默认设置为。xml?
[乔什]我的[…]。
[Baruch] Maven设置。
(杰克)是的。
[巴鲁克]Maven中心?
(杰克)。
[巴鲁克]Maven中心很棒。但是我们需要控制我们实际使用的工件。这意味着我们需要解决来自Artifactory的依赖关系。
(杰克)。
巴鲁克:你是怎么做到的?
乔什:我们能不能换一下——哦,好的。
[Baruch]设置xml。xml的设置在哪里?
乔什:在我的主目录里。
[Baruch]你的主目录在哪里?
[乔什]根本不存在。
[巴鲁克]根本不存在。
(杰克)好。
巴鲁克Maven。正确的。Maven的快乐。我们现在能做的是。我们现在应该做的是使用另一个Maven安装,其中已经烘焙了Artifactory,而不是Maven Central。我们怎么做呢?
[乔什]嗯,正好。现在我开始明白为什么这个有用了。start。spring。io初始化器生成一个构建,其中预先为您配置了Maven包装器。
[Baruch] Maven的包装是什么?
[Josh] Maven包装器的灵感来自Gradle包装器,反过来,你知道,它保留了构建系统本身的一个版本。在这种情况下,应该是Gradle。这样你就可以控制一切了。这确保了您拥有可复制的构建,这在您转向持续交付时变得至关重要,因为每个构建都可能是不同的,并且可以部署。
[Baruch]所以我们在这里实际上没有使用Travis提供给我们的Maven,这是默认的Maven,而是使用包装器。包装器的一个属性是使用哪个Maven。我们可以改变这个属性,说不要使用原来的Maven。但是使用Maven的设置xml指向我们的Artifactory,而不是Maven中心。对吧?
乔什:就像这样。
[巴鲁克]所以,我们要很快地打出来。然后把所有东西都输入进去。
乔什:这是从哪里来的?
[Baruch]所以你在这里看到的是Maven,它不是来自Apache服务器,而是来自你的Artifactory在线。以及Maven的区域分布和Maven的这个分布之间的区别。因为它带有指向Artifactory服务器的默认设置。
[Josh]所以我们只是下载了发行版,解压缩,修改了设置。xml,然后[…]
(Baruch)[…]再来一次,把它放在Artifactory上。现在,由于有了Maven包装器,我们可以完全控制使用哪个Maven。我没说过玛芬的好话。这是Gradle的主意。他们只是偷了它。
乔什:但是他,我们打了个赌,我要让他在演讲结束前说一些Maven的好话。
(巴鲁克)这是一个葡萄酒赌注。我是安全的。就算我输了,这里也有酒。但我不会在短时间内说任何关于Maven的好话。
乔什:你可以——我们走着瞧。所以。这样就够了吗?我们需要的东西都有了吗?
(巴鲁克)看起来是这样。它看起来——
乔什:我按下这个会发生什么?
[Baruch]所以神器会被上传到Artifactory。依赖项将从Artifactory下载。Artifactory将构建并将它们上传到Artifactory。放一个staging包装器,我们可以把它放到,我不知道,像一些云平台。
(杰克)好。
[巴鲁克]你心中有任何好的云平台。
[乔什]听起来不错。听起来不错。是的。所以。
[巴鲁克]让我们先承诺,然后再谈云平台。
[Josh] Git提交减a。
(巴鲁克)好吧。这是一个新问题。上一个是YOLO。所以我们在这里有一些重要的承诺。
乔什:好了,快推。
巴录好了。我们来看看它是怎么起作用的。还没有,这就是YOLO。
乔什:祝你好运。
(巴鲁克)我们会到达那里的。仍然YOLO。意思
(杰克)是的。
(巴鲁克)来吧。好吧。
[Baruch]现在让我们讨论一下,一旦藏物进入Artifactory,我们将如何处理它们。我们马上就会验证,它们会在那里。你知道我们能用他们做什么吗?用藏物?如何验证它们是否已经准备好投入生产?
[Josh]我想做的是,我希望能够给产品管理人员一个机会,他们给我分配了一个故事,让我有机会在应用程序发布后对其进行审查。对吧?
依赖从你的Artifactory实例下载。
[乔什]甜美的甘露。好的。我们正在进步。
(巴鲁克)好吧。对此我很抱歉。是啊,我打断你了。项目管理?你想做什么?
乔什:好吧,如果我要——如果我有一个故事,我做出改变,我承诺。提交交付故事的东西,我还不能交付到生产。[…]。
巴鲁克:这就是为什么我们要分期付款。
[Josh]我们不是在进行持续部署。我们不是在进行持续部署,只是在进行持续交付。我想给产品管理人员一个机会,让他们实际检查工作,并验证是否按照预期完成了工作。然后接受这个事实。
巴鲁克:我们怎么能做到呢?
乔什:嗯,我们可以把它交付到一个暂存环境中。云上的东西。所以我知道-我碰巧知道一个我们可以使用的云。比如——
巴鲁克:哪一个?
[Josh] Cloud Foundry。
[巴鲁克]云铸造。
[Josh] Cloud Foundry是一个开源平台即服务。我不知道你是否听说过。它是一个开源平台。它是由VMware的人开发的,现在它是Pivotal的一部分。它是一个基金会的一部分,其他小的夫妻店也用它作为他们云技术的基础。有多少人听说过IBM?I, B, m,任何人都行。
(巴)。
(杰克)没人?
(巴)。没有手。
[Josh]惠普怎么样?H P。
(巴鲁克)不要举手。
(杰克)没有人。
(巴鲁克)没有手。
[Josh]百度怎么样?百度。有人知道吗?
(巴)是的。开始吧。
乔什:好了。
[巴鲁克]这是一个很受欢迎的平台。
乔什:好了。
(巴)好。
[Josh]所以,这些都是小型的夫妻店,他们试图赢得胜利,他们在云铸造等东西的基础上进行了标准化。所以我们有一个-我有一个账户。
(巴)[…]。等等?让我们看看它是否真的展开了。这里你有URL浏览,在Artifactory,不,下一个。下一个。
(杰克)尴尬。
(巴)是的。这一个。让我们看看它的实际部署。给你。看啊。你有身材。这是二号建筑。
乔什:太美了。
[巴鲁克]你有一些模块。实际上是一个模块。模块里面有什么?让我们向下滚动一点,看看这里的信息。好的。我们有多少依赖项?这是一些依赖项。上面的藏物。在这里。两个工件。 A jar and a jar not war.
(杰克)是的。
[巴鲁克]好决定。
(杰克)是的。
[Baruch]和一个Pom文件。我们已经在Artifactory了。现在让我们谈谈如何将这个构建应用到Cloud Foundry。我们该怎么做呢?
[Josh]让我们添加。让我们快速地把它改成一个小脚本,然后部署它。我们写入new file。或者说是新的目录。箱子在这里添加一个新脚本。然后是cf。sh。
[巴鲁克]哦,天哪。Bash脚本。
乔什:我知道。
(巴鲁克)你是铁杆。
乔什:总得有人做这件事。我们把这个放哪了?我们有一个现成的。桌面。
[Baruch]这是shell脚本。从头开始写能有多复杂?
(杰克)Joshlong。不。Jbaruch。
(巴鲁克)那就是我。我有最好的脚本在我的GitHub?
乔什:是的。
(巴鲁克)不,我没有。
乔什:是的。
[巴鲁克]这是个谎言。不。
乔什:我们把它放在哪里了?
(巴鲁克)我不相信。
(杰克)SwampUP。在这儿。春季引导演示。
[巴鲁克]哦,天哪。
(杰克)副本。
你劫持了我的GitHub账户,把bash脚本放在我的GitHub。
[Josh]在一天结束的时候,你是我代码的分发库。Cd箱。点击cf. sh。
[巴鲁克]那不是我的准则。不。不是我写的。
(杰克)好。Git添加。Chmod ax cf dot sh. Git add. Git的状态。Pwd。Git提交。加上cf,好的。
乔什:所以现在我们要修改我们的特拉维斯指向这个脚本。这个脚本将从那里的存储库下载cf命令行客户端的最新和最好的Linux版本。然后进行身份验证。它将登录、身份验证,然后目标化。然后我们可以用cf来推罐子。这是由特拉维斯建立云铸造。所以我们现在需要相应地修改崔维斯。我们写at bin。bong,尽管这也很酷。Cf。sh,应该可以了。
[巴鲁克]那文件名呢?应该推动什么?
[乔什]那不是已经被指定了吗?[…]。
(巴)是的。它是。问题是:它被正确地指定了吗?
(杰克)是的。
巴录好了。
乔什:好了。[…]。
[巴鲁克]这太棒了。
乔什:是的。
(巴)固体。
(杰克)。完成。我们能推一下吗?Git的地位。Git提交减a。Git推动。如果一切按计划进行,它将在
[Baruch]到Cloud Foundry,我们将能够验证并看到它实际上是有效的。
[乔什]让我们从这里开始。现在。来吧。
(巴鲁克)好吧。开始吧。这里我们有另一个构建。在建造过程中。我想我们可以为下一阶段做准备了。假设Cloud Foundry中的建筑是坚固的。我们收到你的短信了。这就是检验的思想。对吧?
(杰克)确定。
(巴鲁克)这很好。我们的下一步是什么?
乔什:我想我们应该有一个很大的绿色按钮,告诉生产部门或云计算部门。
巴录好了。听起来不错。我们的生产有一点。我们该怎么办?首先,我们当然有Cloud Foundry的生产环境。但我还听说,你构建的那些讨厌的jar文件是可执行文件。
(杰克)。
[巴鲁克]这样我就可以在我的机器上运行它们。
(杰克)绝对。
[Baruch]要在我的机器上运行它,我需要能够下载到我的机器上。
(杰克)。
巴鲁克:你想为我建立一个下载中心?
(杰克)没有。
(巴)。
乔什:我还有事要做。
巴录好了。那么我们要怎么做呢?
乔什:Bintray这个东西。谈谈这个吧。
[巴鲁克]不错的选择。我们分配一下Bintray的这些项。让我们看看Bintray中是否有存储库。它应该是Bintray。com斜杠swampp云原生java。
(杰克)好。
[巴鲁克]那是一个组织。我们有很多存储库,这对一个组织来说是很好的。Maven就是其中之一。我们会用到它。对吧?最快的方法是什么?现在,对于云计算和大众来说,这是一个悬而未决的问题。从Artifactory到Bintray最快的方法是什么?我没有问IBM或[…]。来吧,伙计们。 Huh?
(观众)
【巴鲁克】魔法是个不错的选择。其他任何人。来吧。我们有很酷的t恤。非常感谢。分布存储库。给这位先生一杯茶。两个。不错的选择。
[Josh] Spring的免费拷贝。
巴鲁克哇。你今天很慷慨。
(杰克)是的。嗯,它是开源的。
(巴鲁克)看看你。好吧,它还能建?
乔什:那我们现在做什么?
[Baruch]现在让我们建立一个分发存储库。
(杰克)好。
[Baruch]让我们回到Artifactory,为它实际创建一个新的分发存储库。
(杰克)好。开始吧。
(巴鲁克)好了。是的。让我们在管理中创建一个新的存储库。没有回复。
(杰克)管理。
(巴)分布。点击新按钮。
(杰克)授权。
[巴鲁克]是的,我们应该授权给Bintray。云原生Java。我想是这样。
(杰克)好。把这个抄回来。
(巴)是的。我们有一个复制按钮。太棒了。
(杰克)关闭。粘贴。保存。
[巴鲁克]给它起个名字。
我又活过来了。分布。
[Baruch]让我们为它提供一个许可证和基于GitHub的参考。我们往下走。开始吧。许可证。和。
[Josh] Apache。
[巴录]阿帕奇我们爱阿帕奇2。CS应该是你的GitHub。这个家伙。太棒了。保存并完成。我们都做完了。
(杰克)好。现在怎么办呢?
[Baruch]现在,我们将-一旦您的云铸造构建将被批准。我们可以-它失败了。
[Josh]它失败了,因为我忘了添加环境变量。
(巴)。你所做的。
乔什:所以你可以唱一分钟,跳一分钟,然后我会
(巴鲁克)我会唱歌跳舞。你想做吗?
(杰克)设置。
(巴鲁克)我们的时间还好吗?没那么多。
乔什:没那么多。
巴鲁克:两分钟。
(杰克)好。
巴录好了。
乔什:我们试试吧。
[巴鲁克]你想假装它有效,或者你想做另一件事。
乔什:你可以。是的,我们可以假装。好吧,我们假装一下。
巴录好了。所以我们在Cloud Foundry看到了它,它很好。实际上,我们打开浏览器,输入URL。猜猜我们得到了什么?我们得到了什么?
(观众)
(巴)嗨。它工作。人们看到了现场直播。
(杰克)。
巴鲁克:人们看到了。人们看到了。很好。好吧。
(杰克)浏览器。
巴鲁克:我们有证据。
(杰克)。
(巴鲁克)这是可行的。
[Josh]它就在那里,实际上在[…]。
(巴鲁克)这就过去了。
[乔什]以防万一。
(巴鲁克)好吧。
(杰克)。现在怎么办呢?[…]。
巴鲁克:我们来分发吧。
[Josh]我忘了包括Cloud Foundry的用户名和密码,这很容易做到。现在。
巴录好了。现在我们来分配。让我们回到我们的构建,现在已经可以运行了。在Artifactory,我们现在有了构建。是的。这是构建版本。
乔什和巴鲁克:我活着。
[巴鲁克]第一个。二号人物。哦。3号。下一个。我们有一个新的测试过了。是3。
(杰克)三个?好的。
(巴)。它叫Cloud Foundry,获得了巨大的成功。
(杰克)。
巴鲁克:我们都看到了。
(杰克)好。
[巴鲁克]现在,有一个巨大的按钮。也可以是绿色的。分发。这不正是我们想要的吗?
乔什:这就是我想要的。
[巴鲁克]大大的绿色按钮。
乔什:现在怎么办?
(巴鲁克)来吧。选择分发存储库。然后按那个绿色大按钮。
[Josh]现在我可以把这个连接到网络钩子上了,对吧?
(巴)是的。
[Josh]我可以用它来触发,例如,把一些东西从一个环境推广到另一个环境。
[巴鲁克]当然。现在,一旦你在Artifactory中推广它到Bintray,你也应该在Cloud Foundry中推广它。让我们去Bintray。
(杰克)好。我们到了。
[Baruch]让我们看看Maven存储库中是否有任何新的包。
(杰克)呀!。
巴鲁克:你可以从这里走。组织。然后是Maven资源库。
(杰克)好。
巴鲁克:现在你应该看到我们的新包装了。Cdlive。在里面你应该看到一个版本。给你。你应该会在文件下面看到一些文件。
(杰克)好。
[巴鲁克]它为我们构建了一个快照。我们又把环境变量搞砸了。
(杰克)啊。哦。
[巴鲁克]好吧。
[Josh]所以那应该是build。number。
(巴)是的。它应该是——
[Josh]我应该在这里的构建中指定什么?
(巴)是的。我们在这里搞砸了。
[Josh]构建点版本。
(巴)是的。这就是为什么。
[乔什]一只没有母亲的山羊的儿子。
巴录好了。你没看到。它成功了,这是cdlive的第三版。不管这是什么。我们稍后会修补视频。
(杰克)是的。一切都会好的。所以。
[Baruch]现场演示。伙计。
(杰克)是的。我们学到了什么?今天我们讨论了如何构建一个非常简单的服务。我们明白,如果我们想要得到反馈,帮助我们提高质量,我们需要进行测试。通过在其中构建质量,并提供严格的控制,我们可以将其转移到像Travis这样的持续集成服务器中,以获得验证,当我们进行更改时,事情仍然在与通用的已知基线相对抗。
[Josh]然后我们研究了如何使用这个Artifactory存储库作为某种中心枢纽,将东西从一个地方移动到另一个地方。在本例中,为生产。在这个过程中,如果我们需要,我们可以让它非常自然地访问像云环境一样的东西。
[Baruch]然后,如果你计划从Bintray分发或自存储分发。如果你只想把它放在你的服务上,你可以把它从Artifactory拿出来放在你的服务器上。
[Josh]顺便问一下,Bintray和Artifactory的区别是什么?
[巴鲁克]Bintray 's for distribution。Artifactory是为了发展。我们就是这么做的。
[Josh]所以Bintray,没有托管的,没有私有的预置版本,对吧?
(巴鲁克)会有的。
[乔什]私下?
(巴鲁克)很快。
(杰克)真的吗?
(巴)是的。
(杰克)Bintray吗?我以为是CDN之类的。
[Baruch]是的,但是有一些大型组织实际上想在他们的组织内部分发,他们需要Bintray onPrem,我们会做到的。
(杰克)哇。酷。
[Baruch]为Bundle,或IBM,或[…]。
乔什:好吧。
巴录好了。还有一件事。失败的现场演示拥抱。
(杰克)是的。是的。哦。悲伤。非常感谢。占用你的时间。
[巴鲁克]谢谢你们。
