美味有机NuGet DevOps -从开发人员到部署
网络研讨会描述:
释放JFrog平台的力量,有机地增强您的NuGet开发。采取您的NuGet项目,并给予他们液体软件的真实世界的推动的全部力量。我们将介绍利用JFrog平台的NuGet项目的全生命周期管理,包括存储库设计、元数据和构建推广等概念。我们甚至会在一些带有JFrog x射线的DevSecOps中寻找任何人工香料或添加剂。
培训对象:
NuGet刚接触Artifactory或已经使用Artifactory但想学习最佳实践的开发人员希望使用Artifactory或希望在SDLC中使用Artifactory的DevOps和DevSecOps工程师
先决条件:
对Artifactory /有基本了解NuGet知识
会议议程:
- 谁是JFrog
- 介绍JFrog平台
- SDLC和存储库设计
- Nuget和JFrog平台
- 使用Artifactory更新CI
- 元数据和推广API
- DevSecOps与x光
会议记录
好吧,早上好,晚上好,无论你身在何处。你过得如何?欢迎来到另一个JFrog网络研讨会。这个叫美味有机鸡块DevOps。今天我们要讲几件事。我们会回顾一下我们会介绍一下我们正在讨论的内容,包括我自己。我会给你们一些JFrog平台背后的基础知识。你们今天将有幸参加第一次使用我们JFrog平台新版本的网络研讨会,我会讲到这个。我们将大体上讨论NuGet。
我还将讨论一些事情,比如计划,如何计划利用Artifactory为各种方法为您实现一切,从最初的想法吸收二进制文件和其他第三方NuGet包,到生产包,更好的方法实际生产构建并将它们放入Artifactory,甚至如何使用我们的推广API通过您的系统来推广原子单元。我认为这将是一个信息丰富的网络研讨会。最后我们还会讲一点安全以及如何确保一切都是安全的。除此之外,我们还将讨论接下来的步骤。
我今天不打算担心CI,但我们可能最终会有一个后续的网络研讨会,讨论如何将它包含到Azure DevOps或Jenkins中。但今天,我想更多地关注它的二进制管理方面,不仅是被消费的二进制,还有被生产的二进制。如前所述,我的名字是比尔,或者威廉,取决于你想怎么称呼。请在推特上关注JFrog,如果你愿意,也可以在推特上关注我@williammanning。
让我们继续。我们直接开始吧,我们来讨论一下关于二进制的一切。我们先来了解一下JFrog的基本概念。在当今世界的环境中,生命是靠代码运行的。代码是我们做任何事的关键。我们说每个公司都是软件公司,我们相信在今天的一切中,更好的软件管理包括像二进制文件这样的东西。这就是为什么JFrog能成为现在的公司。我们拥有人们所利用的资源的各个方面,从你的数字生活方式一直到工厂,再到智慧城市。2022世界杯阿根廷预选赛赛程一切都运行在软件上,而JFrog是您可以利用的平台。
我们在JFrog平台上讨论的一件事是能够有一个一致性引擎的想法。实际上,这个平台所做的是,就DevOps或DevSecOps而言,或者只是标准的SDLC软件开发生命周期而言……我们在JFrog有一个解决方案,基本上可以解决背后的每个组件。平台本身确实包含了我们所谈论的一切。您可以使用Artifactory进行所有二进制管理,例如您使用的第三方传输依赖项。我们有27种开箱即用的包类型,NuGet就是其中之一。
当我们去掉包类型以在JFrog平台中支持它时,我们就去掉它。我们解剖它。我们把它撕碎。我们看看它是如何运作的。我们看看它的不足。我们观察它所有的细胞。然后我们将它与它在Artifactory中的存储库匹配。正如你今天看到的,我将展示给你用NuGet。这样你所使用的第三方工具,对它来说,看起来是原生的。看起来你要去NuGet画廊,但实际上你要去Artifactory,我们会讨论这个的。
我们还会讨论x射线,在中间。Xray是我们的安全、遵从性和治理工具。这允许你进去看看你正在使用的任何第三方二进制文件,我今天会给你们看一个例子,里面是否有任何邪恶的东西。它还可以用于许可管理等事情,在这种情况下,您可能有一组内部责任标准,只允许对您正在做的这些第三方库使用特定的许可。
然后是任务控制和洞察。这是一种方式,如果你是一个全球组织,它就像一块中央玻璃,你可以通过它来维护和监控JFrog平台生态系统中的所有东西,还包括CI服务器,比如Jenkins。在底部,我们有管道。管道是我们最新的工具。它实际上是一个CI/CD工具。它是基于yaml和基于容器的。它基本上就像一个云原生风格的CI引擎。它也可以用作CI编曲工具,但我不打算过多地讨论这个问题。
然后,在右边,我们实际上有分布和边缘。这基本上是一个卷你自己的CDN。如果你想把你的软件分发出去,不管是web服务,还是最终用户组件,软件更新,固件更新等等,这是适合你的方式。在物联网领域,它使您能够将信息移动到边缘附近,并具有边缘级缓存或我们所说的不可变发布包,这是组合类型。因此,如果你正在部署一个web服务,你可以将Helm图表和Docker容器作为一个发布,对它们进行数字签名,并确保它们在你最需要的地方可用。
让我们开始今天要讨论的内容吧。我们来谈谈NuGet的发展。我今天会做一些演示,但在我做之前,我想先介绍一下,并和你们谈谈NuGet在Artifactory或JFrog生态系统方面的支持和真正意义。正如我所说的,我今天给出的例子将在我们发布这个网络广播作为下载时提供。但我今天用的是一个非常简单的项目,不会太复杂,因为我想花大部分时间讨论最佳实践,实现,以及更好的二进制管理。
首先,如果你一直在使用NuGet之类的东西,你就会知道它出现在2011年。它的公共资源是nuget。org。我们今天要展示的一件事是,你可以通过Artifactory代理这些请求到NuGet。org,这将允许你通过,假设你有1000个开发人员都使用从NuGet Gallery中提取的同一个库,它将在第一个开发人员获取它的时候存储一次。它将被缓存在Artifactory中,所有后续的开发人员将从中提取。
就像我们对待其他包技术一样,除了NuGet的所有标准实践之外,你还可以加入额外的元数据,因此使所有的NuGet包基本上更适合你,更适用于你的组织。我们现在也支持开箱即用的版本3,所以所有的版本3组件。它已经发布了好几年了,但是我们支持NuGet的第三版。我们也支持Chocolatey,我们也支持Symbol。
Artifactory本身,就像我说的,它允许你进入并使用任何NuGet客户端,无论你使用的是Visual Studio,还是NuGet CLI。甚至JFrog CLI,我今天会给你们展示,它甚至内置了NuGet组件。因此,在与Artifactory合作时,您可以更自然地完成它。它为你提供了一种安全的方法来做NuGet安装等各种事情。但我还将向您展示如何使用CLI工具捕获关于所有NuGet包的构建元数据的更多信息,这些信息超出了您的想象。
你还可以做的另一件事是,我们今天将讨论存储库设计。我之所以提出这一点,是因为它背后的一个方面是,我将向您展示设计存储库的更好方法,使它们与您的SDLC相匹配,这是第一点。第二,如何代理那些第三方的NuGet Gallery包。除此之外,我还将向您展示如何在NuGet项目中实现跨团队依赖。现在我们的维基网站上有大量的信息,我们会把它们都提供给你们。我们还会展示如何进入并连接一些东西,比如符号服务器之类的。除此之外,我们还内置了SemVer版本支持。
你为什么要用我们做你的NuGet画廊?归根结底,我们有10个简单的理由。首先,它减少了网络流量。正如我所说的,您可以通过Artifactory代理您的NuGet Gallery请求,然后我们将它们存储在Artifactory本身。然后,就像我说的,所有后续的开发人员都从Artifactory抽调,而不是外部化。这还允许您添加访问控制和安全性等内容。我将展示Xray的一些内部知识,它是我们的安全产品,在开发者使用二进制文件之前,你可以预先审查它们。
如果你看DevSecOps的术语,这个术语叫做左移。这是ROI在使用二进制代码之前对其进行评估的最便宜的地方,这样他们就不会通过整个SDLC,然后在最后发现里面有一些可怕的东西。我们也有完整的Docker支持。所以如果你想要部署这些东西并将它们托管在Docker容器中,你可以使用完整的Docker注册表支持,我们有与NuGet包和你生产的构建相结合的东西。而且,因为所有东西都存储在Artifactory中,所以您还可以存储您的专有包,并使用诸如标记和属性之类的东西使它们更相关。
您还可以将它用于完全可复制的构建。在此基础上,您可以获得Artifactory本身所具有的稳定性,并且对所有主要的二进制文件和包类型都提供端到端支持。如果你之前做过一些事情,我想在这里简单介绍一下,你典型的NuGet客户正在走向世界。他们不断地从NuGet画廊走出来。如果你在它旁边有Artifactory,所有的请求都进入Artifactory或者你可以应用一些东西,像我说的,元数据值和它周围的安全性,以确保没有任何邪恶的东西被拉进你的系统。
在一个典型的过程中,如果您正在使用Artifactory,您将有您的标准版本控制,您可以使用GitHub或Bitbucket或其中之一进行签入。您有用于这些构建过程的工具。外面有很多。CI工具有很多。这允许你有一个集中的点,在那里你不仅可以拉你使用NuGet时的所有依赖项,还可以拉你生成的所有包。我今天会给你们展示各种不同的方法你可以从一个标准的NuGet推送,到把它变成一个构建,从那个构建,收集它周围的所有信息。
然后我将向您展示如何将其提升为类似于产品存储库的东西,以便其他人可以访问它并尽可能地利用它。但在我们开始之前,我想谈谈这背后的一些不同方面,我想说的第一件事是计划。我认为这至关重要的原因是,你必须把Artifactory,实际上是JFrog平台的整体,看作不仅仅是一个存储东西的地方。它实际上是一个可以用来管理SDLC的地方。我总是把它看作是软件生产人员的传送带,所以从开发人员一直到您的部署。
正如我们在这里所说的,开发人员到部署,代码到云,开发人员到设备,无论你的行业是什么,你都有你使用的术语、技术和堆栈。你有你自己的措辞。但到最后,这是你的SDLC。您的SDLC中有一些步骤,在这些步骤中,您可以在各个方面进行此操作。您可以在此过程中使用Artifactory逻辑地组织您的二进制文件,并在其背后提供元数据,使该过程的每一步都更加相关。
它让人们,比如发布经理,能够进入并查询要发布的对象。当他们进行查询时,他们可以提取所有经过这个过程的所有信息,包括单元测试或QA测试或安全评估。在一个典型的软件开发生命周期中,你要么有无限循环,要么,在我的例子中,我只是向你展示软件开发的恶性循环,正如他们所说的那样。你有你的计划。你有你的分析师。你要进行设计、实现、测试和维护。但是在整个过程中,你有不同的阶段。
你可能会在每个公司称这些阶段为不同的东西,但它们在逻辑上都围绕着相同的理念。但有一件事是,在二进制管理方面,我们在这里讨论的一件事是你产生的二进制文件的数量通过逻辑上将不同的阶段划分为存储库类型,我将在几分钟内讨论,问题是二进制文件的数量减少当你可能每天有数千个开发构建,而你可能只有一个生产版本时。
随着SDLC的进行,二进制文件的数量会随着时间的推移而减少,但与此同时,元数据的信息量会增加。Artifactory和JFrog平台最纯粹的一点是,我们使用了基于校验和的存储,因为我们这样做,存储更便宜。我们在上面有这个元数据层。就像我说的,你会经常听到我说,我是一个元数据狂热者,元数据为王的事实。元数据可以让你拥有最相关的信息,从而做出最好的决策,并将其放在一个集中的位置进行排序,包括SDLC的各种步骤,这真的有助于推动这个想法和那些概念。这样你就可以变成一个精益的,高效的开发机器。
所以让我们先谈谈一些最佳实践。我总是试图把这个作为话题,因为我想向我们的客户重申,我们公司现在有6000多名客户。我想,在《财富》杂志评选的全球前100名银行中,我们拥有75%的银行,从食品技术到太空技术,无所不有。我们的客户在各个方面和方式上利用我们,包括物联网、网络服务等。当我作为一名开发人员时,我已经从我的白发和白胡子中明显地发展了,我已经做了很长时间。它背后的一个方面是我真正开始关注的是像三层开发方法,或者就我而言,我喜欢12因素应用方法。
部分原因是,除了自动化、能够进行干净的操作等所有事情之外,您使用Artifactory这样的东西的关键因素或事情之一是限制开发和生产之间的平价。所以我非常相信在Docker容器中进行开发。我喜欢使用我们的推广API来通过不同的发布步骤来推广这些构建和那些容器的能力,这样你就可以消除开发人员和生产之间的差异构建的能力,它在我的机器上运行,它消除了它,以及能够实际操作和更快构建的想法。
因此,构建、发布、运行、发布的整个思想是Artifactory真正能够帮助加快这一过程的关键因素。你需要考虑的是我们要从思维上的改变开始,也就是仓库。我接触过的很多客户,我尽我所能地教育他们,就是仓库是实现这一点的关键。我接触过的许多客户都说,“我们有一个本地存储库”,我将讨论存储库的类型。“然后我有远程存储库来代理,这就是我所做的。”
问题是存储库可以做的远不止这些。我工作的一部分是我还有一个演讲,你们可以去我们的YouTube主页看看。它实际上被称为5p,我在更大的方面谈到了它。但是我想确保您理解存储库的含义以及如何在SDLC中利用它们。我将给你们看一个例子,当我生成一个非常简单的NuGet包时我今天创建它来展示我如何利用它来生成一个完整的系统记录我生成的所有东西。
因此,在Artifactory中,我们有存储库类型。就像我说的,我们有27种原生支持的包类型,但它们在逻辑上被划分为不同的东西。所以我们有本地存储库。这些是您存储二进制文件、构建和对您重要的文件的地方。这些是你拥有的东西。这是本地化存储库,我将在这里向您展示如何使用这些本地存储库来模拟您的SDLC。然后就有了远程存储库。远程存储库是惰性代理。它们基本上是第三方存储库的惰性缓存。
在这种情况下,我将通过Artifactory代理NuGet画廊,我将向你展示为什么你想这样做,第一点。第二,我将向你们展示它背后的所有信息,我也将向你们展示你们可以利用这些信息进行更好管理的其他方面。然后我们有虚拟仓库。虚拟存储库是本地和远程存储库的组合。我要给你们看一个我今天要用到的例子。这使您能够将SDLC封装到虚拟存储库中,同时还允许跨团队依赖关系。
我将向您展示如何添加,例如,另一个团队的生产存储库作为存储库,例如,您的项目回购,以便您总是使用可能为另一个团队生产的最新版本。举个例子,你可以创建一个web应用程序,有一个团队为你的web应用程序生成认证模块。在过去,您必须仔细检查并找出一种方法,以确保您总是使用该库的最新和最好的版本,以便您的应用程序符合您为外部化发布所做的标准。
在这种情况下,我可以将另一个团队的生产存储库包含到我的构建中,并且根据解决顺序,我总是可以确保拥有该团队生产的版本的最新生产版本。这样我就可以用更简单的方法在我自己的产品线中实现跨团队的依赖。所以如果你看这里,我可能有开发、QA、测试、登台、发布,我可以设计我的存储库来模拟那个实际的SDLC。因为所有东西都和元数据相关,所以你可以通过。我马上就会给你们看一个推广API的例子如果你们要用,比如说,CI的构建步骤来做的话。
但同时,我也将向您展示今天如何使用JFrog CLI工具将二进制文件从一个回购提升到另一个回购,以及从中获得的好处。如果我要给你们展示一个提升API是什么样子的如果你在做一个Jenkins构建的例子,你可以看到我在这里有一些元数据我将在这里执行一个步骤,写着artifactory。promote。这样我就可以移动这个二进制数。我要么复制它,要么把它移到另一个存储库中这个过程周围的所有后续元数据在这个过程中都跟着我。我有一个完整的评估阶段。
让我们开始吧。我要去做一些东西,我会向你们展示它是如何运作的。让我们继续进入下一个阶段。首先,在我进入Artifactory之前,让我给你们展示一下。让我给你们展示一下我正在做的实际项目。我今天要做的项目很简单,很简单,没什么令人兴奋的,只是命令行写HelloWorld,只是一个HelloWorld应用程序写HelloFrog,没什么令人兴奋的。它有几个依赖项。我将向您展示我引入的一些依赖项。
如果你看我的NuGet配置,你可以看到我没有分辨率的地方,可能是我想利用的第三方来源。在我开始之前,我想给你们看一下我这里的项目。我要回去了。让我们来谈谈最新版本的JFrog平台。我将向你们展示我的一个基本组件。我将向您展示我创建的存储库。然后我将向你们展示如何使用我们的设置说明来使用它。我要过去了。我要创建这个包。我要把它部署到Artifactory。 Then I’m going to show you a better method on how you can use the CLI tool to turn that into a build that you can maintain. And then I’m going to show you the promotion API.
我们先开始吧,废话不多说。这是JFrog平台的新版本。这本书几周后就会出版,所以基本上是刚刚出版的。我要登录到我的实例。你马上就会注意到我们平台的新版本发生了一些很大的变化。首先,从用户界面上看,这是一种非常非常不同的方法。在过去的一年里,我们花了大量的时间来重新设计我们的产品。当我进去重新设计产品的时候,我们就进去了。哦,等等。哦,我的上帝。 Hold on a sec. I’m not sharing my screen. So let’s do that.
让我们从屏幕共享开始因为我以为我会按下按钮,但我想我没有。我们看这里。好了。让我们来看看。让我回去给你们看看我的项目。这是我的项目,简单的Visual Studio。我已经打开了。我的NuGet项目非常简单。这是一个非常简单的命令行选项,我把它放在一起,没有什么令人兴奋的。我想让它不那么复杂。 This is now anti-climatic, now the way I did it. Let me log out. Here’s the new UI. Here’s the new login for the platform.
现在让我登录一下,让我给你们看看我们有什么。所以现在我们在所有产品背后都有一个统一的方法。hth华体会最新官方网站在过去,我们曾经有所有系列的产品,我之前向你们展示过,在这个演示中我谈到的是每个界面都是自己的。hth华体会最新官方网站我们现在对平台本身有一个统一的方法。现在Artifactory,我们的x射线产品,分销管道都在同一个接口上。我将在几分钟内向您展示它背后的一些好处,但我不是在这里介绍这个新平台。我在这里告诉你如何使用NuGet。
首先,我说过我要讲存储库。让我们谈谈存储库。我们有地方。有远程的,有虚拟的。我们今天要重点讲的,我要向你们展示我要过滤掉的是我所有的NuGet回购。如果你看这里,我有一份我制作的NuGet本地回购。这是我将要发布我的构建的地方。这是我要放我的NuGet包的地方,我的专有包。在这个例子中,我有一个生产存储库,我将向你们展示推广API,在那里我将把我实际的NuGet包从我的本地回购推广到我的生产存储库,以便其他团队可以使用它。然后我就有了远程存储库。
看这里,我把我的NuGet远程存储库设置在这里,我连接到NuGet。org,我把它们拉进来。但同时,我也会向你们展示,我将通过x射线通过一系列规则来处理所有的NuGet包。现在我有一个远程存储库和一个本地存储库。我今天要用到的是我的虚拟仓库。如果我点击这里,你可以看到我在这里设置了NuGet存储库。如果你看,我有本地的NuGet。我有NuGet产品,我也有NuGet遥控器。我把这三个都封装在一个标准的NuGet存储库中,我今天要在这里做所有的工作。
如果您看这里的底部,我还将向您展示我实际上默认部署到我的新本地存储库。现在我可以进入这里,做一系列动作,比如我可以进入,做包含模式,排除模式。我还可以做一些事情,比如强制身份验证,如果它是需要身份验证的第三方资源。但现在,我要让它非常标准化,这是我实际使用的。好了,让我们看看Artifactory内部的存储库。让我们转到Artifact浏览器。如果您使用Artifactory的时间足够长,那么我们将保持浏览器的相同方式,但对其进行了增强。
现在让我们来看看我的本地NuGet。我这里有。这是我的NuGet虚拟仓库。看这里,如果你想知道如何实现这个,非常简单。Artifactory有个小按钮,上面写着给我介绍对象。当你说设置我的时候,我们实际上会给你所有的说明如何设置这个,并在不同的方法中使用。我们今天要使用的方法是设置NuGet CLI配置,但你也可以在版本3中为API NuGet CLI做这个。你甚至可以进入并设置Visual Studio。
一旦您完成了这些并设置了这些,所有的标准东西,如NuGet Push和NuGet Install都可以正常运行,并且您可以将Artifactory定义为您的标准源代码。以我的例子为例,看这里,你可以用username password来规范化。但在我的例子中,我要登录,它会允许我进入并填写我的用户名和模糊密码的值。在本例中,这是我的加密密码。复制一下,看看我的资料来源。
这是命令行中的项目。之前,当我给你们看的时候,如果你仔细看,这里没有提到Artifactory。这里没有任何信息表明我将使用Artifactory代理我的二进制文件,以确保我拥有的任何第三方源都在这里。如果我回去,我可以粘贴那个NuGet命令它是由Artifactory提供的。如果我点击它,它会进入并成功添加。现在,如果我们进入这里,你会看到我们实际上已经将这些信息存储为这个项目的一部分。
现在回到这里,复制我的set API键。当我设置API密钥时,我也可以这样放置它。现在它被保存为图像源的一部分。现在我的项目都设置好了。现在我已经设置好了,可以开始使用Artifactory,如果我想的话,我甚至可以进去看看NuGet Gallery。我可以去找,比如,Dapper。我这里有一个NuGet的来源。让我们开始NuGet安装。我输入Dapper,然后输入source Artifactory。我这样做。 It’s going to go out, get that package. It’s going to proxy it through Artifactory. It’s going to come.
现在它将把它放入Artifactory本身。如果我在这里做一个LS,你可以看到Dapper现在已经安装到我的项目中了,如果我想的话。如果我们回到Artifactory我要做一个刷新来展示里面的内容,我可以展开它。衣冠楚楚就在这里。这是我看过的那个包,我安装了它。现在它在内部被引用。现在我通过Artifactory代理了这个NuGet包,我有一个副本。这包括我在这里所拥有的所有信息,比如它的依赖关系。如果你看这里,它实际上有两个可靠的依赖项。
这是所有的包裹信息。如果我想,我可以进去修改acl,看看谁有权访问这个。我还可以添加额外的元数据属性,但我已经从NuGet Gallery收集了大量信息,所以我有一个记录系统,可以用于我在这里做的所有事情。这很好。现在我有办法进去了。现在假设我想进去看看这个还有什么。我们已经做的一件事是,在我们平台的新版本中,我们有包查看器。我们的包查看器是一种查看包执行了什么操作的方法,因此它就像一个目录。所以如果我输入Dapper,我就可以进入这里。我拼对了吗? Or maybe it’s not available in here just yet. It’s not available in here just yet.
所以有时它需要一分钟才能完成。但我们还是进去吧,不多说了,因为时间紧迫,我现在就展示给你们看。我要自己制作一个NuGet。我要进去,我要去拿一些,我在这里做了一些有用的事情。看这里,我要在这里建立我的包。这是我的NuGet包。所以我要把这个收起来。顺便说一下,你会看到这里有一堆小错误。给它一分钟。
一旦建造完成,这就是令人兴奋的部分。是的,我有错误。我明白了。现在我要把这个包发布到Artifactory。我们进去看看。我们把它推到Artifactory去。现在我有自己的私人构建,我正在使用。我把它上传到Artifactory中。如果我刷新这个,你会看到我的HelloFrog。这是我自己的NuGet包,我自己的专有NuGet包,这是关于它的信息。 I can do all the same things that can handle a normal package type. That’s my NuGet Virtual.
现在让我们来看看这里。如果我看我的NuGet本地,你能看到我的NuGet本地。这是包裹本身。现在我可以通过x射线扫描,但这里应该没有。这里有一个违规,因为我设置了一个许可值,表示我不接受Apache许可。这只是让我知道有个违规。所以我扫描了我自己的包裹发现了我自己的一个错误。但这一切都很棒。但这都是标准的NuGet包我想保存并利用它。但如果我想了解更多关于它的信息呢?如果我想做点不一样的事呢?
让我们来看看。让我们把这里的视野清空,这样你可以看得更清楚些。这是我创建的HelloWorld包。假设我想做点不一样的事。现在我想知道这个包是如何构造的。我想要存储一个记录系统,这样我就知道东西是如何被利用的。让我回到这里,我们来做这个。我要上传这个包到Artifactory有点不同。在这种情况下,我实际上要通过并签字。
我要上传这个包,这是NuGet包,到我的NuGet本地,我已经在那里了。它允许我覆盖,因为我可以控制它。我要给它起一个构建名。我将写入NuGetHelloFrog,并将其命名为build number 1。所以我现在要把它变成一个构建。现在我可以在visual studio中完成这一工作,但我也可以从命令行中完成。我们来做这个。在本例中,我将使用JFrog CLI工具。我已经将它配置为与我的实例通信。如果我按回车键,它会通过它会上传它回Artifactory。 So I can manually upload this.
我们再做一件事。让我们去收集它周围的所有信息。我来解释一下这是怎么回事。所以JFrog CLI背后有很多强大的功能。有很多命令可以运行。你可以做一些事情,我要展示给你看。我们将浏览并收集所有关于这个项目的GitHub信息因为我在GitHub中检查过。然后我会收集所有的构建信息,也就是它周围的所有环境变量。然后我还会检查我还会拉入它的所有依赖关系信息。我可以查一遍,然后发表出来。 And then after I publish it, I’m going to promote it.
我来给大家展示一下。所以我把它上传到Artifactory。如果你看这里,上面写着artifactory。袋HelloFrog。NuGetHelloFrog,这是我做的构建,第一个构建。让我们打。好的。我现在已经收集了所有与此相关的信息。现在我要讲BCE。现在BCE是建立收集环境信息。我所做的是围绕这个构建创建一个构建对象,现在我们来做这个。 I’ve now collected all the build information. Now we can also go in, and I’m going to say let’s go add another step in here. I’m going to say BAD. I want to collect all the information around all its dependencies.
我们来看BAD。我不认为我有任何依赖。哦,包。哎呀,我打错了。让我们回去,糟糕。好的。现在最后但并非最不重要的,我想发布这个构建到Artifactory。这里是BP。我们来做一下。现在我已经进入了,我成功地把我收集到的所有信息都带了进去,我想,即使我想进入这里看看我有什么样的依赖关系。 We also have built-in NuGet commands. So if you look here, I have one that says NDT that says, “Show solution dependency tree.” So maybe I go in and say Jfrog, and I say RT. I say NDT. There we go. I can actually see from this command line, the dependencies I have.
现在让我们进入Artifactory。这是我的构建浏览器。你看,这是我制作的成品。我是从命令行完成的。我输入了一个版本,如果我点击这个版本,你可以看到我的HelloFrog构建在哪里。如果我点击这里,你可以看到这是NuGet。我马上给你看。我可以点这个,把它带过来,在存储库树中找到它。但我也有它周围所有的环境数据。这是关于它是如何建造的所有环境信息。 With Xray, I’m not scanning it currently right now. I don’t have this as a resource. But I could also do things like hook it up to JIRA and have all the JIRA ticket information here.
如果我有多个构建,我就可以在构建之间进行比较分析。当我开始使用促销API时,我可以进入这里有一个系统记录它每天进入的情况。现在我有了这个基本的包如果我点击进去,现在我把它从我存储在这里的一个标准包转变了。我现在有了一个构建记录的系统。所以我现在可以进去了,我可以说,“哦,看。你知道吗?我现在有了所有这些信息,它是如何构造的,内容是什么。我对这个实际的构建本身很满意。让我们去推广它,看看我们能找到什么关于它的信息。”
我们先回到树上。我要给你看我们有NuGet local和NuGet prod,如果你在NuGet prod下面看,现在什么都没有。我们进去看看。我们去拿吧。我要用这个命令。我要复制这个,把它放到壳上。现在我再帮你清理一下。我们把它粘贴进来,然后看一下参数。这里写着,JFrog RT BPR。实际上,在这种情况下,它是构建推广。 I set the status of a release. This could be any stage that I want. There’s a whole series of metadata that you can have around it. I’ll show you the parameters behind that in a minute.
但你也可以看到我在哪里添加注释。这是我的建立。这是建筑号,这是目的地。如果我击中它,它就会穿过。现在它实际上从我的本地推广到我的生产。回到这里,在这个本地实例上刷新,你会发现HelloFrog不见了。让我们转到生产环境,它就在我的生产存储库中。所以我也可以复制一份。但在这种情况下,我实际上是在移动这个构建。如果我回到构建浏览器,我可以显示这个构建现在实际上有一个发布历史记录,说明这个产品实际上已经发布了。
现在我实际上可以在这里做另一项努力。如果我想,我甚至可以进去。我可以说,“你知道吗?我想改变它的状态,我想做的不是可能释放,而是可能保持。”如果我们做到了,我就能进去了。如果我出去再回来,因为这里没有真正的刷新,我可以进去,这应该是。实际上,我做了另一个。我可以进入我的发布,你可以看到我在整个例子中所处的每个阶段。这样我就可以用这个系统来记录我所做的一切。如果我想,我可以有多个版本,再来一次。
其中一件很好的事情是,如果我想,我可以创建另一个构建。我们来做一下。让我们回到过去,我要围绕它创建一个新的构建。所以我有了我的新包。我要把这个改成第二个。好的。所以我创建了第二个版本。就我而言,我要去收集所有的信息。我将获取GitHub信息。我只是想向你们展示做不同的事情是什么样子的,让我们去收集所有的环境和系统信息。 Let’s get its dependencies.
我按错了按钮。没关系。现在我们发布它,构建第二个。如果我们回去看看我的构建浏览器,让我们回去回到NuGetHelloFrog。你可以看到我现在有了第二个版本。它没有发布历史,但如果我想,我也可以进去看看发布的当前状态如果我点击它。应该不会有任何变化。但是如果你看这里,我可以向你展示我可以在两个NuGet包之间做一个差异,比如说,如果出错了。
如果你进去看一下,就像我说的,你也可以在做代码内容的时候这样做。我也可以向你们展示我所做的我也可以建立一个策略来计算我所有的二进制值。如果我这么做了,我所做的其中一件事就是我实际上把所有有问题的信息都发布到我的Slack中。所以我实际上使用Artifactory在那里推广信息,所以我可以看看是否有任何邪恶的东西。
除此之外,顺便说一下,我想向你们展示的是在Artifactory下面我们也有一个很好的东西,就是我们之前说过的NuGet画廊。如果我想显示我的专有包,我可以说你好,这是我的HelloFrog NuGet包。你可以看到它是用x光扫描的。如果我点击这里,你可以看到,在这个例子中,我有一个可用的版本因为我还没有将它推广到实际使用中。我可以点击这里,给你们看所有的信息这是我之前的其他单独的构建,这实际上是。你可以看到它背后的所有x光数据。你可以看到我所有的相关信息。
你可以看到它是否被分散了。如果我在某个地方用这个,我可以这样做。然后,当然,我有现在引用它的存储库。这是本地回购,这是生产回购。我知道这是所有事情的高级视图,但我只是想向您展示,您可以有一个发布到Artifactory的标准NuGet包。你可以把它转换成一个构建,所以你实际上有更多关于它的信息。你也可以把它作为一系列步骤进行发布。如果你看这里,你可以看到我有各种状态,状态实际上反映了它在SDLC中的位置。
现在我将回到我的演讲,向你们展示一些关于安全的信息,以及为什么它很重要。然后我们要结束我们的谈话。所以你可以用我们做任何第三方过渡的事情。您可以创建自己的包。实际上,您可以使用存储库进行设置,并以各种方法共享它们。您可以收集关于您所拥有的每个构建的更多信息。您可以模拟您的SDLC,并将其作为流程的一部分,拥有一个记录系统,并拥有与您相关的尽可能多的元数据。最后我想说的是,当然,我现在就不分享了。我要回去,我要展示我的演示。
我现在就在演讲吗?我不能告诉。好了。我想应该由我来主持。好的。我将开始讨论安全问题。我想把这个提出来。我不确定你们能不能看到我的…我不知道。好吧,也许我该走了,好了。好的。 I just wanted to make sure you guys could see what I’m showing. So one of the things I want to talk about is that with Artifactory and Xray, being able to make sure that your third-party binaries that you’re utilizing are safe and secure is pretty much an essential feature. What Artifactory does with Xray is it goes through it, tears apart tar gz, NuGet packages, Docker containers, and whatnot, and shows you the contents of those. So you can find out if you have anything nefarious inside of the things that you’re utilizing.
此外,您还可以执行Docker容器之类的操作。所以你可以尽可能深入,甚至深入到依赖关系解析,展示嵌入在那些东西里面的信息你利用这些信息来确保所有东西都是安全的,没有任何内部的邪恶行为。有了Xray,我们使用这些数据来进行计算,从而为公司提供保护,并确保不仅开发人员,而且终端用户都可以获得这些信息,以确保一切都符合组织的标准。
最后,我想展示的一件事是,通过将它作为安全产品的一部分,以及您实际构造和构建代码的方式,可以让您从开发人员那里了解它。您可以将其作为构建评估过程的一部分,也可以作为发布过程的一部分。如果你使用我们的一个ID插件,ID插件的好处是你的开发人员可以直接在IDE内部获得安全数据,这样他们就可以在产品或你使用的库出现任何潜在的错误之前就采取措施,从而为你节省了大量的钱,看起来像一个明星。
我的演讲到此基本结束了。我只是想提一下。但我也想说的一件事是,我们在圣何塞有一件大事,在不久的将来。我们有swampUP,我们的年度用户大会。今年是6月22日到24日。很多了不起的人都参加了。我们有很多很好的实践课程。我们也有很多优秀的赞助商展示他们的产品。你只要去swampup.www.si-fil.com注册。这就是我今天的演讲。 I hope this has been informative on why you’d want to do this, but why you’d also want to use Artifactory to store your package you produce and the builds you produce to make sure that you have everything internally and ready to go.
我希望每个人都有美好的一天。我会看看大家是否有什么问题,我会尽力解答。如果没有,我在这里看到了一条信息。我不能告诉。你很好。谢谢你!希望大家喜欢。如果没有其他问题,我们的JIRA页面上有大量的信息。请去看看。还有,就像我说的,这里有一些不错的东西,让我和大家分享一下我的屏幕。 Please, when you get an opportunity you can go to our … Also, if you want to learn all other information, we also have our JFrog Academy, which is available publicly. JFrog Academy is a great way to learn more. You can get into greater detail on some of the topics that we had today, so everything from what Artifactory is down to administrators, DevOps, engineers, and developers, even down to security.
另外,如果你在高度监管的环境中,我在devops.com上有一个关于如何实现安全的演讲,也可以去看看我们在YouTube页面上的其他精彩视频,那里有很多信息和内容。另外,要留意。我们经常在外奔波。所以请大家去看看我们即将举行的一些会议,比如我们即将在乔治亚州亚特兰大举行的Devnexus。另外,我们还有一些其他的问题,它们都在我们的页面上。我一时想不起来,因为我太糟糕了。
这就是我今天的演讲。谢谢大家的出席。希望大家都喜欢,那就是我。欢呼,每一个人。保持软件液体。
