将代码交付到云端的最佳方式

布莱恩·本茨,梅丽莎·麦凯
云倡导者,开发者倡导者,微软Azure, JFrog

在本节课中,我将重点介绍开发人员将代码交付到云端的最简单方法,以及可靠地进行更新和维护产品代码的最佳方法。

重点将是使用GitHub上提供的免费sdk和工具的实际示例和演示。

我展示的示例、工具和演示将适用于任何云平台,并且都可以在GitHub上获得。

这是一个技术演讲,将集中于代码,但我将展示Microsoft Azure运行示例。

跨混合/多云环境采用最佳实践

视频记录

欢迎每一个人。很高兴在“云之日2022”见到大家。我们又过了一年假期。我希望你们都健康平安。我是Melissa McKay,我是JFrog的开发者拥护者。今天我和微软的布莱恩·本茨在一起。我们将一起分享和讨论一些关于通用软件开发、周期和管道的事情。我会给你们一个关于这些主题的介绍,Brian会接着讲一个实际的实现,给你们看一些代码和一些在幕后发生的事情。让我快速分享一下我的屏幕。首先,我有几张幻灯片要讲。 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和构建管道的经验中,我将稍微涉及一点价值流,只是为了让你知道在你的团队中可能应该关注什么。然后Brian会跟进一个实现。我们还将讨论实现DevOps背后的现实。

首先,这些是我经常给大家的资源。2022世界杯阿根廷预选赛赛程几乎所有关于DevOps的演讲都会包含这些资源。2022世界杯阿根廷预选赛赛程我喜欢这些书,《Phoenix Project》、《Unicorn Project》和《DevOps手册》。这是我在那里读到的第一批关于DevOps的书。绝对会留在我的书架上。实际上我需要回去复习其中的一些,我已经有好几年没读过了。

《凤凰计划》的有趣之处在于它是一个虚构的故事,但它是一种新颖的形式。这是关于一个团队,他们的产品和交付肯定有一些问题,很多效率问题。它谈到了一个管理的角度如何处理这些问题以及如何做出一些改变来让流程更好。交付的每个阶段都可以被认为是可以通过引入一些概念来改进的,例如,能够自行配置机器,诸如此类。所有这些在书中都有讨论。

独角兽计划是凤凰计划的续集。这本书也是以小说的形式出现的,从开发者的角度来看,你会看到很多在那本书中描绘的人物和你在第一本书中看到的一样。非常有趣。《DevOps手册》基本上就是一本手册。那本书介绍了一些概念。这更像是一本手册。一定要去看看。亚马逊有售。值得一读。

这是我经常在公司甲板上看到的一个屏幕。我想在这里展示它,只是为了展示DevOps领域是多么的庞大。例如,并不是所有的东西都包括在这里,我有点偏心。和JFrog在一起,我把Artifactory放在了一切的中心。Artifactory可以被认为是所有东西的中心,作为您在整个生命周期中用于项目的所有二进制文件和所有依赖项的存储。

因此,作为一名开发人员,当我第一次开始,当我第一次相信这就是全部,我记得20多年前,我开始在一个团队实习,我不熟悉持续集成。我希望我们的观众对此很熟悉。每个人都应该使用它。但是这整个想法能够为你的源代码提供一个公共的地方,能够有自动化的构建,这样当你签入源代码时,构建就会自动发生,测试也会自动运行,你可以在过程的开始就立即过滤掉问题。因为在那之后还有很多事情要做。

你可以在这个图中看到,所有这些小步骤都有编号。它们非常小,很难看到,因为涉及的内容太多了,但所有涉及到部署到测试环境的步骤,例如,确保您使用了适当的包管理器,您的CI服务器上的构建工具,诸如此类,将您的产品转移到测试阶段,进入登台阶段,然后最终进入生产阶段。hth华体会最新官方网站这还包括所有的配置工具,其中也包括自动部署。作为开发人员,这些都是我在DevOps领域接触到的新事物。

也就是说,你不需要知道所有这些信息,你不需要成为所有方面的专家。这就是DevOps团队的意义所在,对吧?你有开发人员,你有操作人员,你有安全团队。所有这些人都应该在一起交流。不再有单独工作的竖井,而是所有这些领域之间的界限,你需要在那里进行沟通,以便整个过程顺利进行。

随着时间的推移,我们已经创建了这些基本的at概念和DevOps环境的基本组件。我最近参加了一个小组讨论,我喜欢一个关于汽车制造的比喻,现在,就DevOps而言,有更多的产品和东西正在进入管道。hth华体会最新官方网站它可以与汽车制造业相比较。如果我们必须自己制造汽车,今天有多少人会开车到处跑?

所以我想说的是,我们需要这些汽车制造商进入DevOps领域。这就是我们要讲的。我们开始有了这些框架,这些产品,我们可以用它们来解决所有的问题,并把它们都放在一个漂亮的,整洁的。hth华体会最新官方网站有些人固执己见。所以你不需要做所有这些选择。你可以从头到尾完成所有的事情,并且有一定的技能可以专注。这使得您的团队在软件交付时更加高效和快速。

这些组件都是管道的一部分。对于那些被“管道”这个词搞得不知所措的人来说,要明白这也是一个被过度使用的术语,特别是对于那些含有“管道”这个词的产品。hth华体会最新官方网站软件管道就是你将产品从开发一直到生产所采取的步骤。这些组成部分都包含在这些步骤中。您已经有了源代码存储库。您有您的持续集成环境,其中包括您的自动构建。你有你的包管理器,你有你的安全扫描,这可以发生在测试阶段,甚至在最后。最好让它尽可能靠近管道的开头。然后你就有了持续的部署,有能力做出改变,并让改变一直流到最后发布你的产品或应用程序。

最后,在我把这个交给Brian之前,这是我想提出的最后一件事,这样他就可以向我们展示一些实现细节。你需要决定你真正在乎的是什么。我之前提到过,在你的管道中,你需要决定你想要使用哪些产品,你想要利用你的团队中的哪些技能。hth华体会最新官方网站有一些非常棒的框架可以为你解决这些问题。布莱恩会给我们展示一个例子。

但最终,你需要找到你在乎的是什么。当你在设计你的管道时,当你在考虑如何交付你的产品或应用程序时,要确保找到那些减慢你速度的步骤。您可能有机会在这部分实现自动化。您可能有机会为您的队友创建一些自助服务机制。最终,你需要决定把钱花在哪里,以及对你的团队来说,这些钱花在哪里是值得的。这可能不是你计划中的每一步。你可能需要专注于一个开始。

这张幻灯片是我的车的照片。这是一个很好的视觉效果,你需要关注什么。我需要这辆车载我去我要去的地方。它不值多少钱。当然也不值得我去修理我卷入的小车祸。所以我从亚马逊买了一个10美元的创可贴。这就足够了。所以我的管道是可靠的。好吧,我把这个交给布莱恩。向我们展示一些如何实际实现这个的细节。

酷。太好了。谢谢,梅丽莎。很高兴来到这里。我要讲一点。我还有几张幻灯片,我们将进行演示。但是在我们开始演示之前,我只需要谈谈您可以在Azure上使用的目标环境。所以我今天要展示的演示是与GitHub Actions一起工作的Artifactory。它将被部署到Azure的应用程序中。在这种情况下,Azure Web应用程序。

您可以使用的目标环境,我们有多个。当然,我们有虚拟机,Kubernetes服务,我们有一个叫做Azure Spring Cloud的东西,这是一个托管的Kubernetes服务,Spring构建在它的基础上。对于Java开发人员,我们有Red Hat OpenShift,我们还有其他一些东西可以用来交付应用程序,特别是容器。Kubernetes有一个叫做Azure容器应用程序的东西,这是一种可扩展的方式,可以将容器发布到网络上。

但在今天的情况下,我们将专注于Azure Web应用程序。Azure Web应用程序实际上是完全托管的。完全托管的通道本身,你可以以你想要的方式部署应用程序,它集成了IntelliJ中的Eclipse和VS Code, VS Code是我们的免费开源文本编辑器,你可以使用。我今天要展示的应用程序是Java,但你可以使用任何类型的应用程序来运行,基本上是在Azure Web Apps上。

它通过几种方法内置了CI/CD集成。第一个是通过GitHub Actions,然后我们有一个叫做Azure pipeline的东西,你可以使用。这些都与JFrog的产品集成,包括Artifactory和x-ray,还有JFhth华体会最新官方网站rog提供的CI/CD工具也与我们的集成得很好。例如,如果你有Jenkins或其他一些已经准备好的工具用于构建和测试,你也可以使用JFrog的CI/CD工具,并将它们与我在这里展示的工具集成在一起用于发布。

所以最酷的是,任何外部CI/CD工具都非常适合构建和测试,如果你已经投资了的话,然后你可以使用我们的工具进行发布和部署。它的优势在于它是Azure的一部分。因此,如果你已经有了一个Azure帐户,一切都是集成的,你的身份是已知的,你不需要做大量的身份管理和设置安全性和自动登录。这是很酷的东西。但完全托管的通行证有CI/CD通过GitHub动作。它也通过Azure管道。您可以在Azure内部的多个规模和平台级别上部署这些东西。我马上会给你们看一些演示。

今天,我将向你们展示我之前提到的Visual Studio Code。这是一个开源的免费文本编辑器。你可以在codevisualstudio.com上获得。我们将使用GitHub。所以我们将使用GitHub Actions,当然还有一个repo,用于存储我们在这个应用程序中使用的数据和代码。然后我们使用JFrog的Artifactory存储一些依赖工件。

有几件事你可能不知道,但我总是想提一下,因为它们很酷,那就是GitHub Mobile。所以GitHub Mobile是一种从你的手机上启动CI/CD工具的方法。我以前做过。当我在度假时,我没有带我的笔记本电脑,无论出于什么原因,我需要做一些合规的事情,更新一个应用程序,你实际上可以从GitHub Mobile启动一些东西,这很酷。

最后但并非最不重要的,我确实想提一下Codespaces。Codespaces是一种在GitHub中构建应用程序和创建容器定义的方法。因此,有一种方法可以实际生成一个完全集成的开发人员环境。它会复制你的应用程序,在容器中运行。你可以用Codespaces在很多浏览器上编辑它。这很酷。

让我们进入实际应用本身。我会给你们看我今天要演示的东西。我要从应用开始讲起。这就是应用。它是一个Java应用程序。这是一个春季引导应用程序。这是一件愚蠢的小事。我们在微软有一个开发者的吉祥物,叫做Bit。

我想给你们看这个的原因是我们有一个叫做特征管理器的东西。这将是显而易见的,为什么这是重要的,因为我将向您展示如何自动自定义配置应用程序时,你部署他们在GitHub动作。在这里,我们有这个东西叫做特征管理器。如果你进入配置资源管理器。在这里,有一个beta设置。

那么特性管理器是做什么的呢?它允许你在生产环境中进行AB测试。这个特征叫做。现在已经启用了。如果我禁用它,回到我的应用程序,你最终会看到一个不同的版本。我只需要刷新几次。好了。所以它去掉了位。这只是一个愚蠢的小例子。它会自动这样做。 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,你说生成设置。如果我在这里输入密码,它就会包含密码。但是我们在做一个演示,所以我打算把它作为一个通用版本。

你需要有三样东西。你需要有你当前的用户名,它会给你一个用户名,然后是密码,然后是你使用的Artifactory repo的主机名。有了这个,输入密码后就可以下载这个片段了。所有的东西都是不安全的。然后我们要做的是自定义它。

以上就是关于如何创建Artifactory的一些内容。然后我们要做的是我们要继续讲我们正在使用的回购。所以在我的回购中,这是公共回购。因此,您可以去获取我今天使用的所有演示工件。你必须建立自己的Artifactory。而且是免费的。你也可以这样做。但这是回购。这里我创建了一个XML文件settings。

如果我们先看pom。xml,你把分发管理的代码片段放在依赖和构建之间。基本上就是复制粘贴。不需要任何改变。接下来我创建了settings。xml,不过我做了一点定制。我为Artifactory的用户名和密码以及主机创建了一个所谓的GitHub秘密。你这么做的原因是,你可以把这个完全不安全的版本粘贴到GitHub。如果它是一个公共回购,当你试图将其推到回购时,GitHub真的会给你很多警告。它只是不想这么做。在某些情况下,如果你工作的组织已经正确设置了安全性,它将不允许你发布这个。

这里的想法是你需要为用户名,密码和主机创建秘密。然后你要做的是,在GitHub回购本身中,它的设置在秘密中,你为这个特定的应用程序创建你需要的秘密。现在,还记得我在一开始向您展示特征标志时提到的,您必须拥有连接字符串才能将应用程序连接到主机。

好的,在这里。应用配置连接字符串,在repo中。所以你构建的任何GitHub动作都可以引用这些秘密。应用程序配置连接字符串和主机、密码和用户名。这是一个已发布的配置文件,用于连接您的实际应用程序GitHub Actions与repo。我们要生成一个新的。我马上就会告诉你们怎么做。

好吧。这就是你要做的。简单回顾一下,注册或Artifactory一个免费帐户,从Maven中获取配置信息在settings。xml中,自定义这些并在repo中创建这些秘密。看看里面的秘密。这里很酷的一点是,你可以使用我的settings。xml,复制这个,然后使用相同的变量名。你可以开始了。你不需要像我一样自己创造这个。

好的。我们继续。让我们看看我们可以用它来做什么。如果你看…这是Azure。这就是你们可能不熟悉的传送门。在我的Azure门户中,你可以创建自定义仪表板。这只是为JFrog DevOpsDays。我还有其他几个。这是我组织工作的方式,因为我是云计算的倡导者。我有不同的演示和不同的演示,我为每一个创建了一个仪表板。

在这种情况下,我的仪表盘在这里。我有这个测试web应用程序,这就是我们在这里看到的。这是我们在玩的测试web应用程序。但我要从头开始创建一个,向你们展示如何做一个新的。让我们开始吧。

我要做的就是创建一个资源。顺便说一下,你也可以使用Azure CLI,但如果你是新手,这要容易得多。我想把这个作为演示。所以我们选择订阅。如果你还没有订阅,你可以注册一个新的。它们是免费的。我们要去我的资源小组。所以Azure中的所有东西都有一个资源组。这只是一种组织和划分应用程序并使它们有组织的方法。所以我总是知道我所有的演示都是在DevOps或JavaShops中,例如,这是我的资源。

今天我们要讲devopsjfrogdemo。这是怎么回事?我把JFrog拼对了吗?好了。它告诉我它可以在Azure website.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.

我用West US 2表示我们的位置。这些是我们的区域。不管怎么说,我们有一个地点。然后我选择我的计划。我已经有了一个预设的计划,所以我不需要为我的演示做这些。然后我就可以回顾和创造了。但是我想建立CI/CD。我们将使用GitHub Actions。它要做的是创建一个通用动作供我使用。它可能会要求我进行身份验证。 No. Okay, cool.

我们用bbenz作为组织,也就是我。我们将使用JFrog作为测试特性标志,这是我之前给你们展示的一个repo里面有秘密,设置和已经设置好的pom。我们要用到主分支。它的作用是生成一个GitHub Action。这个GitHub动作将会失败,因为我们还没有正确地配置它,但这是一个开始的好方法。你已经有了一个基本的模板,然后你可以往里面添加东西。让我们做一个回顾和创建。好吧。让我们继续创建它。

正如我提到的,这是部署。还有两件事,我需要做一件事就是应用服务。然后我还需要做另一件事,把这个连接到Artifactory,就GitHub回购而言。运行时,这是Azure仪表盘。如果我回到GitHub看我的回购,如果我进入actions,哦,它正在尝试,它正在非常非常努力地尝试。现在尝试,但会失败因为这段代码实际上不起作用。现在就让它失败吧。我们会回来讨论的。但是让我们把它设置好。

好吧。我们看看能不能找到这个。就在那儿。我在这里做的是从。我应该提一下。这就是动作。这是动作运行。然后你要做的就是进入代码,进入GetHub工作流。如果你看JFrog的演示,这是为这个创建的YAML。这个YAML将会悲惨地失败,因为它没有任何对Artifactory的引用,也没有我们需要的秘密的引用。

这在某种程度上是可行的,但不是所有的情况都适用。好消息是它有我新…这是我们创建的公开资料。如果我回头看我的回购设置秘密。所以我们这里有第二个公开的档案。它是一分钟前创建的。它将把这个Azure应用程序与我们正在构建的GitHub Action连接起来。

所以自定义它,或者回到代码。GitHub工作流。我现在要进入Visual Studio Code。我要把这个放到本地版本的应用程序中。Visual Studio Code有内置的Git命令供你使用。在这种情况下,我要做的是把这段代码拉进来。如果我看这里,我只是通过GitHub控件把它拉进来。现在,在我的GitHub工作流中,我们将使用实际的GitHub动作。这是赌博文件。我们需要添加一些东西。 So let’s go ahead and add those.

我们要做的第一件事就是把连接字符串的值加到上面。因此,应用程序本身将连接到连接字符串。就是这样。除非在这里,否则构建将失败,因为它依赖于连接字符串。如果你在生产环境中,这不是最好的事情,但这是一个演示。那又怎样?

你想要做的下一件事是当你进入部署时,它创建了这个叫做用Maven构建的步骤。就在那儿。因此,使用Maven构建只是运行Maven的干净安装,但这不是您想要做的。所以我有了一个自定义版本。稍后你可以进入我的repo你也可以在那里看到这个工作流。

所以…哦。我们不要那样做。不要让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配置连接字符串,这样它就能正确地构建。这是一个通用的环境变量。

下一件事是它运行在最新的Ubuntu上,因为它反映了我们正在使用的实际web应用程序。然后它检出应用程序本身。GitHub Actions运行在这些叫做runner的东西上。所以GitHub动作是在容器中运行的。它不会在你的GitHub回购中运行。它正在创建一个副本并运行。你可以做一些改变,继续做一些事情,但是它会保存状态,就像你启动那个动作的那一刻一样。

然后使用Maven设置构建。而不是Maven清洁安装,这是默认的,我们有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应用程序。从那里,它只完成清理工件之类的事情。

如果我们进入作业本身,哦,我们可以到这里,点击这里,它实际上会进入应用程序,希望是这样,但是这个应用程序会失败。看到应用程序错误了吗?因为我们还有一件事要做。我提到了一个两阶段的过程。在这种情况下,我的部署就完成了。我可以去这个资源。它是完整的,但它不工作。这是两件不同的事情。然后我要做的就是在构型中建立这个字符串。

现在,还记得我们建立了到特性管理器的连接,但我们没有在应用程序中建立它。我们只在用于构建应用程序的运行器中,所以我们知道它是有效的。接下来我要做的是复制这个连接字符串。我做过几次。它已经缓存了名称,但值在这里。大家都去看看。没关系。你不能看到全部。

一旦我这样做了,我就把这个应用设置保存在我的应用服务中。这可能需要一到两秒钟,但如果我回到我的应用服务,我点击。这是一个很好的错误信息,因为。所以应用程序实际上是在工作的。所以我们全面部署。让我回顾一下我们在这里做了什么来达到这个阶段。我们进入了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.

然后我们要做的是进入settings XML,设置秘密,设置分发管理和GitHub repo里面的pom。XML,设置秘密。就是这样。app配置连接字符串,主机,密码,用户名,它会自动生成你发布的配置文件。完成这些之后,就可以部署了。然后,一旦我们部署,我们需要在这里设置最终的配置连接字符串,以使实际的运行时应用程序工作,而不仅仅是构建和部署。完成这些之后,我们就得到了应用程序本身。

因此,希望以上是对应用程序本身以及如何从Artifactory实际部署内容的一个很好的概述。梅丽莎,你想谈谈Artifactory本身吗?

是的。我们现在知道如何将Artifactory与GitHub Actions集成,但为什么我们要做这样的事情呢?好的,Artifactory为您提供了存储和管理目录、所有依赖项、第三方依赖项以及您创建的最终发布的工件的机会。

你在这个存储库中看到的,我只想说,我们选择了这个默认存储库。但是通过Artifactory存储所有这些东西的方式,创建特定于项目或特定于团队的新存储库是非常容易和廉价的,无论您的组织是如何构建的。我建议针对具体项目。我在这方面有很多经验。

但是这些存储库,虚拟存储库基本上是一个指针指向你在一个特定项目中需要的所有存储库。例如,它包含到远程Maven的链接。在本例中,我们使用的是Java项目。所以我们需要远程Maven中心。它还包括您内部构建的所有内容。你只有一个虚拟回购它是指向所有这些东西的指针。因此,您可以使用相同的存储库进行开发和部署。

存储库,取决于远程存储库的设置方式,您可以看到远程存储库中可用的所有内容,但只有实际用于项目的项被引入并存储在缓存中。这意味着对这些特定依赖项的后续请求将直接来自Artifactory,您将不需要再次经过Maven Central的第二步。

这样做的好处是,您可能有一些关于从哪里获得工件的公司规则。你可能想让那条路径只经过Artifactory,然后知道其他的。这也是一种对正在使用的二进制文件和依赖项拥有全面权限和控制的方法。无论它们是在内部创建的,还是远程引入的,当必要的repo由于任何原因可能离线时,缓存都非常适合这些实例。它允许您管理依赖关系,以便您可以潜在地拥有用于生产的存储库,而不是用于研究和开发的存储库。对于在这些情况下允许使用哪些工件,您可能有不同的规则。

您还可以围绕依赖项强制执行这些规则。例如,我们最近有一个关于J security的日志。问题就出来了。如果您希望限制该特定Java库的旧版本的下载,则可以使用Artifactory。然后,您还可以跟踪使用特定依赖项的每个构建或项目。因此,在同样的例子中,使用blog for J,您可以确保您已经追踪到所有正在使用它的项目,并强制它们使用最新版本,从而修复那里的安全漏洞。

而JFrog的Artifactory,我猜,实际上创建了一个工具,你可以用它来做二进制文件。对吧?你可以查一下。

是的。

我要提一下这里的一个优点是,我现在在屏幕上看到它,你可以看到在这个特殊的应用中,我们没有用log表示J。所以我不需要进去检查我的构建或pom。xml或任何依赖项。我可以到这里看看为什么for J没有使用这个应用,这很酷。

是的。在JFrog平台中,你可以设置扫描你用于特定项目的所有依赖项。这是我们在平台伞内的x射线产品。它可以通知您已发现的新漏洞。此外,您还可以强制开发人员是否可以部署或下载具有这些漏洞的项目或库。

酷。好了,好了。我想这就是我想要展示的一切。我还提到了一种使用Azure pipeline实现这一点的方法,但这是一个完全不同的演示。在接下来的时间里,我们将继续使用GitHub Actions,我认为很多人都在使用它。

是的。很期待你的作品,布莱恩。我觉得这里还有很多东西要学。当然是用GitHub Actions。拿着他在这里所做的,去那间仓库看看,自己试试,尤其是那些秘密。我认为这是解决我们很多问题的极好方法。

是的,谢谢。不,实际上,我反复尝试了好几次。这是最干净最简单的一个,也是GitHub抱怨最多的一个。这是一种很好的方法。有很多种不同的方法。有一些插件和东西你可以用Artifactory和你的GitHub Actions进行身份验证,但我发现生成代码然后创建秘密是最干净、最简单、最简单的。我可以把它移到任何我想要的回购。梅丽莎,我提到过,如果你想看这个,这个视频和我在回购上的代码的组合应该足以让你开始,让它像演示中那样工作。

太好了。再次感谢。大家好好享受接下来的云之日吧。

谢谢,每一个人。

要么快速释放,要么死亡