将代码交付到云的最佳方法
在本次会议中,我将重点介绍开发人员将代码交付到云的最简单方法,以及可靠地进行更新和维护生产代码的最佳方法。
重点将放在真实世界的例子上,使用GitHub上提供的免费sdk和工具进行演示。
我所展示的示例、工具和演示将适用于任何云平台,并且都可以在GitHub上获得。
这是一个专注于代码的技术演讲,但我将展示Microsoft Azure运行示例。
视频记录
欢迎每一个人。很高兴在2022年云之日见到你。假期过后又是一年。我希望大家都健康平安。我是Melissa McKay,我是JFrog的开发者倡导者。今天我和微软的Brian Benz在一起。我们将一起分享和讨论一些关于一般软件开发,周期,管道的事情。我会给你们一个这些主题的介绍,布莱恩会跟进一个实际的实现给你们看一些代码和一些在幕后发生的东西。让我快速分享一下我的屏幕。首先,我有几张幻灯片要讲。 Before we get there, Brian, would you like to give us a little bit of background on yourself?
确定。太好了。谢谢。嗨。Brian Benz,我是微软的云计算倡导者。我已经在那里工作了8年,具体来说,主要是在Azure上开发Java,但也开发DevOps。很高兴今天来到这里。我将展示一些GitHub action和Artifactory一起工作的演示。
太棒了。好吧。梅丽莎·麦凯,我之前说过。作为一名开发者倡导者,我已经在JFrog工作了近两年。在此之前,我是一名开发人员。所以我经常从开发者的角度出发。DevOps对我来说是一个相对较新的东西。在成为倡导者之前,我确实在DevOps团队中有几年的经验。这就是我今天要讲的,从布莱恩开始。
首先,开发人员为什么要关心DevOps呢?事实上,这让我很惊讶,因为我所处的文化背景是,开发者都在一个筒仓里,他们站在墙的一边。我们完全没有参与到部署中,我们没有真正参与到如何在生产环境中配置应用程序的决策中,诸如此类的事情。
我们每天只专注于我们的ide,我们写代码,我们修复bug,我们创造功能,所有这些事情,但我们并没有真正参与到最终产品中。事实证明,我们应该在一开始就参与其中的原因有很多。这就是DevOps的全部要点和DevOps的意图。尽管有许多不同的DevOps方式,但它是那些可能被过度使用并可能在团队中被错误使用的术语之一。我肯定有一些故事来支持这一点。
但总而言之,这对我来说是如此重要的一步的主要原因是因为我意识到我在一开始所做的一些编码决定真的与应用程序的部署方式有很大关系。这就是微服务兴起的原因。
我将快速浏览一下DevOps的定义。这很简单,因为它直接来自维基百科。然后我将描述一些我们已经熟悉的组成部分。根据我们在DevOps和构建管道方面的所有经验,我将触及一点价值流,只是为了让您了解您应该在团队中关注什么。然后布莱恩会跟进一个实现。我们还将讨论实现DevOps背后的现实。
首先,这些是我经常给大家的资源。2022世界杯阿根廷预选赛赛程我所做的任何关于DevOps的演讲都会用到这些资源。2022世界杯阿根廷预选赛赛程我喜欢这些书,《凤凰项目》、《独角兽项目》和《DevOps手册》。这是我在那里读到的第一批关于DevOps的书。一定要放在我的书架上。实际上我需要回顾一下其中的一些,我已经好几年没有读过它们了。
但《凤凰计划》的有趣之处在于它是一个虚构的故事,但它的形式很新颖。这是关于一个团队,他们的产品和交付肯定有一些问题,很多效率问题。它谈到了一个高管的角度如何处理这些问题以及如何做出一些改变,使流程更好。交付的每个阶段都可以被认为是可以通过引入自我服务的概念来改进的,例如,能够自己提供机器,诸如此类的东西。所有这些都在书中讨论过。
《独角兽计划》是《凤凰计划》的续集。这也是一个新颖的形式,从开发者的角度来看,你会看到很多相同的角色在书中,你看到的第一个。读起来很有趣。DevOps手册基本上就是一本手册。那本书介绍了一些概念。这更像是一本要遵循的手册。一定要去看看。亚马逊有售。值得一读。
这是我经常在公司甲板上看到的屏幕。我喜欢在这里展示它,只是为了展示DevOps空间有多庞大。例如,并不是所有的东西都包含在这里,我有点偏见。和JFrog在一起,我把Artifactory放在一切的中心。Artifactory可以被看作是整个项目生命周期中所有二进制文件和所有依赖项的存储中心。
作为一名开发人员,当我第一次开始并相信这就是一切的时候,我记得早在20多年前,我刚开始在一个团队中做实习生,我对持续集成并不熟悉。我希望我们的观众对此很熟悉。每个人都应该使用它。但是能够为你的源代码提供一个公共的地方,能够进行自动构建,这样当你签入源代码时,构建就会自动发生,测试就会自动运行,你可以在过程开始的时候立即过滤掉问题。因为在那之后还有很多事情要做。
你可以在这个图表中看到,所有这些小步骤都被编号了。它们非常小,很难看到,因为涉及的内容太多了,但是围绕部署到测试环境所涉及的所有步骤,例如,确保您正在使用适当的包管理器,在CI服务器上使用构建工具,诸如此类,将您的产品移动到测试阶段,到登台阶段,然后最终进入生产阶段。hth华体会最新官方网站这还包括所有的供应工具,这些工具也涉及到自动部署。作为一名开发人员,这些对我来说都是新事物。
也就是说,你不需要知道所有这些信息,你不需要成为每件事的专家。这就是DevOps团队的意义所在,对吧?你有开发人员,有操作人员,有安全团队。所有这些人都应该一起交流。没有单独工作的竖井,但是所有这些领域之间的界限,你需要在那里进行沟通,这样整个过程才能顺利进行。
随着时间的推移,我们已经创建了这些基本概念和DevOps环境的基本组件的桶。我最近参加了一个小组讨论,我喜欢一个关于汽车制造业的比喻,现在,有很多产品和东西正在进入管道,就DevOps而言。hth华体会最新官方网站它可以与汽车制造业相比较。如果我们必须自己制造汽车,我们中有多少人今天还在开车?
所以我想说的是,我们需要DevOps领域的汽车制造商。这就是我们要开始做的。我们开始接触这些框架,这些产品,我们可以用它们来解决所有这些问题,并把它们都放在一个漂亮,整洁的地hth华体会最新官方网站方。有些人固执己见。所以你不需要做所有这些选择。你可以从头到尾完成所有的事情,并且有一定的技能可以集中精力。这将使您的团队在软件交付方面更加高效和快速。
这些组件都是管道的一部分。对于那些被“管道”这个词搞得不知所措的人来说,要明白这也是一个被滥用的术语,尤其是对于那些有“管道”这个词的产品。hth华体会最新官方网站软件管道就是将产品从开发一直带到生产的步骤。这些组件都包含在这些步骤中。您已经获得了源代码存储库。您拥有持续集成环境,其中包括自动构建。您有您的包管理器,您有您的安全性扫描,这可能发生在测试阶段,甚至在最后。最好将其放置在尽可能靠近管道开头的位置。然后你就有了持续部署,有能力做出改变,并让这种改变一直持续到最终发布你的产品或应用程序。
最后,这是我想在把这个交给Brian之前提出的最后一件事,这样他就可以向我们展示一些实现细节。你需要决定你真正在乎的是什么。我之前提到过,在你的管道中,你需要决定你想要使用哪些产品,你想要利用团队中的哪些技能。hth华体会最新官方网站有一些非常棒的框架可以帮你解决这些问题。布莱恩会给我们展示其中一个例子。
但最终,你需要找出你关心的是什么。当你在设计你的管道时,当你在考虑如何交付你的产品或应用程序时,要确保找到那些让你慢下来的步骤。您可能有机会在这部分实现自动化。您可能有机会为您的队友创建一些自助服务机制。最终你需要决定把钱花在什么地方,哪些地方对你的团队来说是值得的。这可能不是你管道的每一步。你可能需要从其中一个开始。
这张幻灯片是我的车的照片。这是你需要关注的一个很好的视觉效果。我需要这辆车载我去我要去的地方。它不值多少钱。当然也不值得修理我的小车祸。所以我从亚马逊买了一个10美元的创可贴。这就足够了。所以管道是固体的。好吧,我把这个交给布莱恩。向我们展示一些如何实际实现它的细节。
酷。太好了。谢谢,梅丽莎。很高兴来到这里。我要讲一点。我还有几张幻灯片,我们会做演示。但在我们开始演示之前,我只需要谈谈您可以在Azure上使用的目标环境。我今天要演示的是Artifactory与GitHub Actions的合作。它将被部署在Azure的应用程序中。在这种情况下,在Azure Web应用程序。
但是,您可以使用的目标环境有很多。当然,我们有虚拟机,Kubernetes服务,我们有Azure Spring Cloud,这是一个托管的Kubernetes服务,在其之上构建了Spring。对于Java开发人员,我们有Red Hat OpenShift,我们还有其他一些东西可以用来交付应用程序,特别是容器。Kubernetes有一种叫做Azure容器应用程序的东西,它是一种可扩展的方式,可以将容器发布到网络上。
但在今天的例子中,我们将专注于Azure Web Apps。Azure Web应用程序实际上是完全托管的。完全托管传递本身,你可以以你想要的方式部署应用程序,它集成了IntelliJ中的Eclipse和VS Code,这是我们的免费开源文本编辑器,你可以使用。我今天要展示的应用是Java,但你可以使用任何类型的应用运行,基本上是在Azure Web Apps上。
它通过几种方法内置了CI/CD集成。第一个是通过GitHub Actions,然后我们还有Azure pipeline,你也可以使用。这两种工具都可以与JFrog的产品集成,包括Artifactory和x-rayhth华体会最新官方网站, JFrog提供的CI/CD工具也可以与我们的产品很好地集成。例如,如果您有Jenkins或其他一些用于构建和测试的预制工具,您也可以使用JFrog的CI/CD工具,并将它们与我在这里展示的用于发布的工具集成在一起。
所以很酷的是,任何外部的CI/CD工具都非常适合构建和测试,如果你已经投资了的话,但之后你可以使用我们的工具来发布和部署。它的优点是它在Azure的内部。因此,如果你已经有一个Azure帐户,一切都是集成的,你的身份是已知的,你不需要做很多身份管理和设置安全性和自动登录。这是很酷的东西。但是完全管理的通行证通过GitHub Actions有CI/CD。它也有通过Azure管道的通道。你可以将这些东西部署在Azure内部的多个缩放和多个平台级别上。我马上会给你们看一些演示。
今天,我将向你们展示我之前提到的Visual Studio Code。这是一个开源的免费文本编辑器。你可以在codevisualstudio.com上找到。我们将使用GitHub。我们会使用GitHub Actions,当然还有一个repo用于存储我们在这个应用中使用的数据和代码。然后我们使用JFrog的Artifactory存储一些依赖构件。
有几件事你可能不知道,我总是喜欢提一下,因为它们很酷,就是GitHub Mobile。所以GitHub Mobile是一种从你的手机启动CI/CD工具的方法。我以前做过这个。当我在度假的时候,我没有带笔记本电脑,不管出于什么原因,我需要做一些遵从性的事情,更新一个应用程序,你可以从GitHub Mobile启动一些东西,这很酷。
最后但并非最不重要的是,我想提一下Codespaces。代码空间是在GitHub中构建应用程序和创建容器定义的一种方式。所以有一种方法可以生成完全集成的开发人员环境。它实际上获取应用程序的克隆,在容器中运行它。你可以用Codespaces为很多浏览器编辑它。这很酷。
让我们进入实际的应用程序本身。我会给你们展示我今天要展示的东西。这是。我将从应用程序开始。这就是应用。这是一个Java应用程序。这是一个spring引导应用程序。这是一件愚蠢的小事。我们在微软有一个开发者的吉祥物,叫做Bit。
我想给你们看这个的原因是我们有一个叫做功能管理器的东西。当你在GitHub Actions中部署应用程序时,我将向你展示如何自动自定义配置应用程序,这将很明显地说明为什么这很重要。在这里,我们有这个东西叫做feature manager。如果你打开配置资源管理器。在这里面,有一个设置。
那么特性管理器是做什么的呢?它允许你在生产环境中进行AB测试。我有一个叫做beta的特性。它现在已经启用了。如果我禁用它,回到我的应用程序,你最终会看到一个不同的版本。所以我只需要刷新几次。好了。所以它去掉了位。这只是一个简单的例子。它会自动这样做。 The cool thing about this is I can just turn this on and off. And each time I refresh this, the user would see a new version.
你可以这样设置50%的人看到旧版本的应用,我在刷新它,50%的人看到新版本的应用。你可以做AB测试,部署东西,测试它们而不需要改变代码。你只需要进入特性管理器并连接它。
我想给你们看这个的原因,为什么它在这个应用中是唯一的,是因为它需要在你的应用中有一个自定义连接字符串。现在把它收藏一会儿,你会看到为什么这很重要,因为你需要定制你的CI/CD工作流,你需要与应用程序的特性管理器共享那个连接字符串,但你需要安全地完成它。我来告诉你们怎么做。我还将向您展示与Artifactory集成的相同技术。这就是一个小应用。我们再刷新一下。这是。好吧。所以它回来了。所以我把它开了又关。
好吧。我想让你们知道的第一件事,并不是很多人都知道,你可以在你选择的云上设置Artifactory。在这种情况下,我选择Azure只是因为,很明显的原因,我希望,我为微软工作。你要做的就是…如果你在Azure上搜索JFrog Artifactory,你会找到这个,但实际的URL,我们稍后会分享。它是JFrog-Artifactory-start-free-on-Microsoft Azure,单词之间有破折号。
这里的想法是,这将在Azure上设置。这样做的好处是,如果你有合规性问题,或者你可能有一些需要选择的云方面的域问题,或者你可能只是想让它与Azure内部的身份测量方面的所有东西集成,你可以在Azure上设置Artifactory。这里的位置,它说的是服务器细节,但这些实际上是我们在Azure中所说的区域。美国、加拿大、欧洲、澳大利亚和亚洲在这里都有很好的代表。
你设置你自己的服务器名,输入你的邮箱,添加密码,输入你的姓和名,你会得到这样的东西,这是快速设置。当你开始使用它时,你会有你的统计数据作为开始显示。但从这里,你可以做的是,因为这是我正在使用的Maven应用程序,我选择Maven。好吧。所以当你进入这里,你点击你想使用的存储库。在本例中,我只使用默认的Maven虚拟,它是Artifactory的云存储。
然后点击“设置我”你可以做两件事。对于部署,这是要放到pom.xml中的东西。稍后我将向您展示它在pom.xml中的位置。然后为了从你工作的任何地方与Artifactory服务器进行认证,在这里是GitHub Actions,你说generate settings。如果我在这里输入密码,它就会包含密码。但我们这里做的是演示,所以我将保留通用版本。
你需要具备三样东西。你需要有你当前的用户名,它会给你一个用户名,然后是你的密码,然后是你正在使用的Artifactory repo的主机名。现在,一旦你得到了这个,你只需要在输入密码后下载代码片段。这样一来,一切都不安全了。然后我们要做的是我们要定制那个。
以上就是关于如何设置Artifactory的一些内容。然后我们要做的是我们实际上要转到我们正在使用的回购。在我的回购中,这是一个公开的回购。所以你可以去获取我今天使用的所有演示工件。你必须建立你自己的工厂。而且是免费的。你也可以这样做。这是回购。我所做的是创建一个settings at XML文件。
如果我们先进入pom。xml, pom。xml,你把发布管理的代码片段放在依赖关系和构建之间。基本上,只是复制粘贴整个东西。不需要任何更改。接下来我设置了settings。xml,不过我对它做了一些定制。我创建了所谓的GitHub秘密Artifactory用户名和密码和主机。你这么做的原因是,你可以把这个完全不安全的版本粘贴到GitHub上。如果它是一个公开的repo,当你试图将它推送到一个repo时,GitHub会给你很多警告。它只是不想这么做。在某些情况下,如果您所在的组织设置了正确的安全性,它将不允许您发布此信息。
这里的想法是,您需要为用户名、密码和主机创建秘密。然后你要做的是,在GitHub repo内部,它的设置在secrets中,你为这个特定的应用创建你需要的秘密。现在还记得我在开始时提到的,当我向你们展示特色标志时,你们必须有连接字符串来连接应用程序到主机。
就在这里。在repo中的应用配置连接字符串。因此,您构建的任何GitHub操作都可以引用这些秘密。应用配置连接字符串、主机、密码和用户名。这是一个发布的配置文件,用于连接您的实际应用GitHub Actions与repo。我们要生成一个新的。我马上就会告诉你们怎么做。
好吧。这就是你要做的。这里简单回顾一下,注册或创建一个免费帐户,从Maven中获取配置信息,在settings.xml中设置pom.xml,自定义这些,并在repo中创建这些秘密。参考里面的秘密。这里很酷的一点是,你可以,如果你愿意,你可以使用我的settings。xml,复制这个,并使用相同的变量名作为你的secret。你就可以走了。你不需要像我一样自己动手。
好吧。我们继续。我们来看看能用这个做什么。如果你看…这是Azure。这是你们可能不熟悉的入口。在我的Azure门户中,你可以创建自定义仪表板。这是为JFrog DevOpsDays准备的。我还有其他几个。这就是我组织工作的方式,因为我是云计算的倡导者。我有不同的演示和不同的演讲,我为每一个都创建了一个仪表板。
在这种情况下,我的仪表盘在这里。我有这个测试web应用,这是我们在这里看到的。这是我们在玩的测试web应用。但我将从头开始创建一个,向你们展示如何做一个新的。让我们从这里开始吧。
我会说,创建一个资源。顺便说一下,你也可以使用Azure CLI来实现这一点,但如果你是一个新手,这更容易遵循。我想给大家做个演示。所以我们选择订阅。如果你没有订阅,你可以注册一个新的。它们是免费的。我们要去我的资源小组。所以Azure中的所有东西都有一个资源组。这是一种组织和划分应用程序并使它们有组织的方法。因此,我总是知道我所有的演示都是用DevOps或javascript编写的,例如,这是我的资源。
今天我们要说devopsjfrogdemo。这是怎么回事?我拼对了吗?好了。它告诉我这在Azure网站。net上是可用的,因为我们需要从网络访问它。我们要发布代码。我们要去一个运行时堆栈。毫不奇怪,我们有很多。net可用性。我们还有Java、Node、PHP、Python和Ruby。在本例中,我们将选择Java 11。 And you can use the embedded server. You can use JBoss, EAP, or several versions of Tomcat. We’re just going to use the Java SE embedded server. And we’re going to run this on Linux. More than half of… We have a ton of Linux running on Azure. Actually more than half of our VMs, people are not always aware, are actually running on Linux on Microsoft Azure. So that’s kind of cool.
我选美国西部2号作为我们的地点。这些是我们的区域。无论如何,我们有一个位置。然后我选择我的计划。我已经准备好了一个计划,所以我不需要为我的演示做这些。然后我就可以复习和创作了。但是我想设置CI/CD。我们将使用GitHub Actions。它会创建一个通用动作供我使用。它可能会让我鉴定。 No. Okay, cool.
所以我们将使用benbenz作为组织,也就是我。我们将使用JFrog作为测试特性标志,这是我之前展示过的一个repo,里面包含了秘密和设置,并且已经设置好了。我们将使用主分支。它的作用是生成一个GitHub Action。这个GitHub Action会失败,因为我们还没有正确配置它,但这是一个很好的开始。你有了一个基本的模板,然后你可以往里面添加东西。让我们做一个回顾和创建。好吧。让我们来创建它。
所以,正如我提到的,这是部署。我需要做一件事我需要做的是应用服务。然后我还需要做另一件事来连接这个到Artifactory,就GitHub的repo而言。当它运行时,这是Azure仪表板。如果我回到GitHub,看看我的repo,如果我进入actions,哦,它正在尝试,它正在努力尝试。现在正在尝试,但它会失败因为这段代码实际上不起作用。所以我现在就让它失败吧。我们会回来的。我们先把它设置好。
好吧。我们看看能不能找到这个。就是这个。所以我在这里所做的,我应该提一下。这是动作。这是正在运行的动作。然后你要做的是回到代码,进入GetHub工作流。看一下JFrog demo,这是为这个创建的YAML。这个YAML将会失败,因为它没有任何对Artifactory的引用,也没有对secret的引用,这是我们需要的。
这实际上在某一点上是可行的,但它不能解决所有问题。好消息是它有我新…的秘密,这是我们创建的公开资料。如果我回头看看我的回购设置秘密。这是第二份公开的档案。它是一分钟前创建的。这是将Azure应用程序与我们正在构建的GitHub Action连接起来的东西。
所以自定义它,或者回到代码。GitHub工作流。我现在要进入Visual Studio Code。我将把这个放到本地版本的应用程序中。Visual Studio Code有内置的Git命令供你使用。在这个例子中,我想做的是拉入这段代码。看这里,我刚通过GitHub控件拉进来。现在我有。在我的GitHub工作流程中,有实际的,这是我们将要使用的实际的GitHub动作。这是一个赌博文件。我们需要添加一些东西。 So let’s go ahead and add those.
我们要做的第一件事是我们要把那个连接字符串值添加到顶部。因此应用程序本身将连接到连接字符串。就是这样。除非此选项在这里,否则构建将失败,因为它依赖于连接字符串。如果您在生产环境中,这不是最好的东西,但它是一个演示。那又怎样?
您要做的下一件事是,当您进入部署时,它会在这里创建这个称为使用Maven构建的步骤。就是这个。因此,build with Maven只是运行Maven的干净安装,但这不是您想要做的。我有一个自定义版本。你可以稍后进入我的仓库你也可以在那里看到这个工作流。
所以…哦。我们不要那样做。不要让YAML生气。我们开始吧。所以,我还是做了。哦男孩。好吧。好吧。必须定制那个YAML,这样它才会真正工作,而不是阻塞。好吧。 So that’s that. So this should actually work now. When we build this and push it, it’s actually going to configure another application run. And it’s going to deploy. And it should deploy out correctly, because we have the correct published profile here. And what I’m going to do is I’m going to set this up. I’m going to save it.
然后我们在GitHub Actions中做什么。在这里,正如我提到的,我们有内置的Git控件,添加Artifactory演示秘密。好吧。所以我现在要做的就是把这些变化呈现出来。我要提交,只要点击那个复选框。然后我将这些更改与repo同步。当我这样做的时候,顺便说一下,这是在我的Visual Studio Code本地。我不知道我有没有提过。
当我回到我的GitHub,我们可以检查我们的动作。这是一个完全失败的例子。这是一个,交叉手指,将工作。5演示。现在它正在建造。在它建造的时候,让我来描述一下它的实际功能。让我们回到Visual Studio Code。它做的第一件事是添加那个app configuration连接字符串,这样它能正确构建。这是我们想要放在这里的一个通用环境变量。
接下来它会运行在最新的Ubuntu上,因为它会镜像我们正在使用的实际网络应用。然后检查应用程序本身。发生的是GitHub Actions运行在这些被称为runner的东西上。所以GitHub的动作是在容器中运行的。它不在你的GitHub仓库里运行。它正在创建一个副本并运行。你可以做出改变并继续做事情,但它会保存状态就像你启动那个动作时一样。
然后我们使用Maven设置构建。而不是Maven clean install,这是默认的,我们有Maven包。我指定了XML的设置。只要两倍或三倍地弄清楚,我们使用的是引用工件的XML设置,而不是使用默认的Maven Central repo。在这里,您使用Artifactory用户名、密码和主机。然后它所做的就是上传工件用于部署。因此它创建了一个JAR文件。它知道JAR文件在哪里。它将jar文件发送给运行程序。然后它会部署最新的Ubuntu。 And it uses that published profile that we created when it was automatically generated when you connect to Azure DevOps.
所以让我们进去看看,确保……耶!因此,构建成功了。所以安装运行和构建Maven,它实际上是工作的。你已经下载了。我想说的一件事是,我真的很沮丧,如果你注意到这里的这些小星星,你可能也会很沮丧。我在想,为什么它显示的不是完整的URL,而是这些小星星?我意识到我所做的是在我的GitHub Action中创建了一个秘密。GitHub不会显示这个秘密,因为它是秘密。用户名和密码设置好了,也被隐藏了。你可以去拿这些。
然后它会抓住,嗯,它会抓住建造它所需要的一切。把所有东西都藏在木头里。因为这些日志可能是公开的,也可能是组织中您可能不认识的人可以使用的。所以很长一段时间我都想不明白。为什么会这样?为什么不显示完整的URL?但那是因为我制造了一个秘密。应该是这样的。
好吧。看起来它也被展开了。它实际上为部署设置了任务。看,我说过它运行在一个运行器上。所以当前的运行程序版本,操作系统,这里的一切。顺便说一下,你可以创建在本地运行的自定义跑步者。这个在GitHub上运行。然后再次下载工件。部署到Azure Web App,然后从那里,它就完成了清理工件之类的工作。
如果我们进入作业本身,哦,我们可以到这里,点击这里,它会跳转到应用程序,但这个应用程序会失败。看到应用程序错误了吗?因为我们还有一件事要做。我提到了一个两阶段的过程。在这种情况下,我的部署就完成了。所以我可以找到这个资源。它是完整的,但不能工作。这是两件不同的事情。然后我要做的是在构型中建立那个字符串。
现在,请记住我们设置了到特性管理器的连接,但我们没有在应用程序中设置它。我们只在用于构建应用程序的运行器中运行,所以我们知道它是有效的。接下来我需要做的是复制这个连接字符串。我已经做过几次了。它已经缓存了名称,但值在这里。大家去看看。没关系。你无法看到整个过程。
一旦我这样做了,我把这个应用设置保存在我的app服务中。这可能需要一到两秒钟,但如果我回到我的app服务,点击。这是一个很好的错误信息,因为。好了。应用程序实际上在工作。所以我们完全部署了。让我来回顾一下我们在这里做的事情。我们进入了JFrog。我们注册了Azure。我们经历了开始。我们定制了pom.xml。我们定制了settings.xml。 We went into GitHub and we updated those. And then we went into our Azure portal and we created a new web app and we set up automatic CI/CD, which created a template that you can use for customizing. Because it fills and deploys a lot of the stuff that you need, but it fails.
然后我们要做的是进入我们的设置XML,你设置秘密,你设置发行管理和pom。XML在GitHub的仓库里,你设置你的秘密。就是这样。app配置连接字符串,主机,密码,用户名,它会自动生成你发布的个人资料。一旦完成,你就可以部署了。然后一旦我们部署,我们需要在这里设置最终配置连接字符串,以使实际的运行时应用程序工作,而不仅仅是构建和部署。一旦我们完成了这些,我们就得到了应用本身。
希望这是对应用程序本身的一个很好的概述,以及如何从Artifactory部署东西。梅丽莎,你想谈谈工艺品本身吗?
是的。我们现在知道如何将Artifactory与GitHub Actions集成,但是我们为什么要做这样的事情呢?Artifactory为您提供了存储和管理目录、所有依赖项、第三方依赖项以及您创建的最终发布的工件的机会。
你在这个存储库中看到的,我只想说我们选择了默认的存储库。但是Artifactory存储所有这些东西的方式使得创建特定于项目或特定于团队的新存储库变得非常容易和便宜,无论您的组织是如何构建的。我建议针对具体项目。我在这方面有很多很好的经验。
但是这些存储库,虚拟存储库基本上是一个指针,指向你在一个特定项目中需要的所有存储库。例如,它包含到远程Maven的链接。在本例中,我们使用一个Java项目。所以我们需要远程Maven中心。它还包括你内部建立的所有东西。你只有一个虚拟的回购,它是指向所有这些东西的指针。因此,您可以使用相同的存储库进行开发和部署。
存储库,取决于远程存储库的设置方式,您可以看到远程存储库中可用的所有内容,但只有您实际用于项目的项被引入并存储在缓存中。这意味着对这些特定依赖项的后续请求将直接来自Artifactory,您将不需要再次走到Maven Central的第二步。
这样做的好处是,您可能有一些公司规则来规定您可以从哪里获得工件。你可能想让这条路径通过Artifactory,然后知道其他的。这也是对正在使用的二进制文件和依赖项拥有全面权限和控制的一种方式。无论它们是在内部创建的还是远程引入的,缓存对于那些必要的repo可能出于任何原因离线的情况都是非常有用的。它允许您管理依赖关系,这样您就有可能拥有用于生产的存储库,而不是用于研究和开发的存储库。对于在这些情况下允许使用哪些工件,您可能有不同的规则。
您还可以围绕依赖项强制执行这些规则。例如,我们最近有一个J安全日志。问题出现了。如果您想限制对那个特定Java库的旧版本的下载,您可以使用Artifactory。然后,您还可以跟踪使用特定依赖项的每个构建或项目。在同样的例子中,使用blog for J,您可以确保您已经跟踪了所有使用它的项目,并强制它们使用最新版本,从而修复了那里的安全漏洞。
JFrog的Artifactory,我猜,实际上创建了一个工具,你可以用它来做二进制文件。对吧?你可以核对一下。
是的。
我刚要提的一个优点是,我现在正在屏幕上看它,你可以看到我们在这个特定的应用程序中不使用log来表示J。因此,我不需要进入并检查构建或pom.xml或任何依赖项。我可以在这里看看为什么for J没有使用这个应用,这很酷。
是的。在JFrog平台中,您可以设置对特定项目使用的所有依赖项的扫描。这是平台伞内的x射线产品。它可以通知您已发现的新漏洞。您还可以强制开发人员是否可以部署或下载具有这些漏洞的项目或库。
酷。好了,好了。我想这就是我想展示的。我提到的还有一种方法可以在Azure pipeline中做到这一点,但那是一个完全不同的演示。在剩下的时间里,我们将继续使用GitHub Actions,我认为很多人都在使用它。
是的。期待更多你的作品,布莱恩。我觉得这里还有很多东西要学。绝对与GitHub行动。接受他在这里所做的,去访问那个仓库,自己尝试一些东西,特别是使用秘密。我认为这是解决我们许多问题的极好方法。
是的,谢谢。不,实际上,我反复尝试了好几次,才让它成功。这是最干净最简单的一个,也是GitHub抱怨最多的一个。这是一个很好的方法。有很多不同的方法可以做到。有一些插件和东西你可以用Artifactory和你的GitHub动作进行身份验证,但我只是发现生成代码,然后只是创建秘密是最干净的,最简单的,最容易的。我可以把它转移到任何我想要的回购上。正如Melissa所说,如果你想看这个,这个视频和我在回购上的代码的组合应该足以让你入门并像演示中那样工作。
太好了。再次感谢。祝大家在接下来的"云之日"节目中愉快。
谢谢,每一个人。
