美味的有机NuGet DevOps -从开发人员到部署
网络研讨会描述:
释放JFrog平台的力量,有机地增强您的NuGet开发。拿你的NuGet项目,给他们一个现实世界的推动液体软件的全部力量。我们将介绍使用JFrog平台的NuGet项目的完整生命周期管理,包括存储库设计、元数据和构建提升等概念。我们还会撒一些DevSecOps与JFrog x光检查是否有人工香料或添加剂。
谁应该出席:
NuGet开发人员是Artifactory的新手,或者已经在使用Artifactory,但想要学习最佳实践希望使用Artifactory或希望将Artifactory用于其SDLC的DevOps和DevSecOps工程师
先决条件:
对人工制品有基本的了解NuGet知识
会议议程:
- JFrog是谁?
- JFrog平台简介
- SDLC和存储库设计
- Nuget和JFrog平台
- 使用Artifactory更新您的CI
- 元数据和推广API
- DevSecOps与x射线
会议记录
好了,早上好,晚上好,无论你们身在何处。你好吗?欢迎来到另一个JFrog网络研讨会。这个叫做Tasty Organic NuGet 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 Gallery,但实际上你要去Artifactory,我们会讨论这个。
我们还会讨论x射线,它在中间。Xray是我们的安全、合规和治理工具。这允许您进入并查看您正在使用的第三方二进制文件,今天我将向您展示一个这样的示例,其中是否包含任何恶意内容。它也可以用于许可证治理之类的事情,在这种情况下,你可能在内部有一套特定的责任标准,你只被允许为你正在做的这些第三方库提供特定的许可证。
然后是任务控制和洞察号。这是一种方式,如果你是一个全球性的组织,它是一个中央窗格,你可以浏览并维护和监控JFrog平台生态系统中的所有东西,还包括像CI服务器这样的东西,比如Jenkins。在底部,我们有管道。管道是我们最新的工具。它实际上是一个CI/CD工具。嗯,它是基于yaml和容器的。它基本上就像一个云原生风格的CI引擎。它也可以用作CI编排工具,但我不打算过多地讨论这个问题。
然后,在右边,我们有分布和边缘。这基本上是一个您自己的CDN。如果你想发布你的软件,不管是网络服务还是终端用户组件或者软件更新,固件更新等等,这就是你的方式。在物联网领域,它让你能够将信息移动到边缘附近,并拥有边缘级缓存,或者我们称之为不可变发布包,这是一种组合类型。因此,如果你在部署一个web服务,你可以把赫尔姆图和Docker容器作为一个发布版本,对它们进行数字签名,并确保它们在你最需要它们的地方可用。
让我们开始今天的话题吧。我们在这里讨论NuGet开发。今天我将演示一些东西,但在此之前,我想先介绍一下NuGet在Artifactory(在本例中是JFrog生态系统)中的真正含义和支持。正如我所说,我今天给出的例子将在我们发布这个网络广播时作为下载提供。但我今天用的是一个非常简单的项目,没有什么太复杂的,因为我想花大部分时间谈论一些事情,比如最佳实践,实现,以及更好的二进制管理。
首先,如果你用过NuGet的东西,你知道它是在2011年出现的。它的公共资源是nuget.org。我们今天要展示的一件事是你可以通过Artifactory代理这些请求到nuget.org这将允许你,假设你有1000个开发人员都使用从NuGet库中提取的相同库,它将在第一个开发人员第一次获取它时被存储一次。它将被缓存在Artifactory中,所有后续开发人员都将从中提取。
就像我们对待其他包技术一样,除了您从NuGet获得的所有标准实践之外,您还可以进入并添加额外的元数据,从而使所有这些NuGet包基本上更适合您,更适用于您的组织。我们现在也支持版本3,所有的版本3组件都是开箱即用的。NuGet已经发布好几年了,但我们支持NuGet的第三版。我们也支持Chocolatey,我们也支持Symbol。
Artifactory本身,就像我说的,它允许你进入并使用各种NuGet客户端,不管你是用Visual Studio,还是用NuGet CLI。甚至JFrog CLI,我今天会给你们看,它甚至有内置的NuGet组件。所以你可以更自然地使用Artifactory。它为你提供了一种安全的方法来做NuGet Install之类的事情。但是,我还将向您展示如何使用CLI工具捕获有关所有NuGet包周围的构建元数据的更多信息,这比您想象的要多。
你还可以做的另一件事是我们今天将讨论存储库设计。我提到这个的原因是它背后的一个方面是我将向你展示更好的方法来设计你的存储库,使它们与你的SDLC相匹配,这是第一。第二,如何代理那些第三方NuGet Gallery包。除此之外,我还将向您展示如何在NuGet项目中实现跨团队依赖。现在我们的维基网站上有大量的信息,我们会把这些都提供给你们。我们还会向你们展示如何连接东西,比如Symbol Server之类的东西。除此之外,我们还内置了SemVer版本支持。
你为什么要用我们作为你的NuGet画廊?归结起来,我们有10个简单的原因。首先,它减少了网络流量。正如我所说,你可以通过Artifactory代理你的NuGet Gallery请求,然后我们将这些请求存储在Artifactory中。然后,就像我说的,所有后续开发人员都从Artifactory提取,而不是外部化。这也允许你加入访问控制和安全之类的东西。我将展示Xray内部的一些东西,我们的安全产品,在开发人员实际使用它们之前,您可以预先审查二进制文件。
如果你看DevSecOps的术语,这个术语叫做左移。在使用前对二进制文件进行评估是投资回报率最低的地方,这样他们就不会遍历你的整个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强前10家银行中的75%,从食品技术到太空,无所不有。我们的客户在各种方面和方式上利用我们,包括物联网、网络服务等。当我还是一名开发者时,我显然是在用我的白发和白胡子开发游戏,我已经这么做很长时间了。它背后的一个方面是,我真正开始关注像三层开发方法这样的东西,或者在我的情况下,我喜欢12因素应用程序方法。
部分原因是,除了自动化之类的东西之外,你利用像Artifactory这样的东西的一个关键因素或事情,就是能够进行清洁操作,以及类似的事情,这限制了开发和生产之间的平等。所以我非常相信在Docker容器中进行开发。我喜欢使用我们的推广API通过不同的发布步骤来推广这些构建和容器的能力,这样你就可以消除开发人员和生产产品之间的构建差异,它在我的机器上工作,它消除了这种差异,以及能够更快地操作和构建的想法。
所以构建、发布、运行、发布的整个理念是Artifactory能够真正帮助加速这一过程的关键因素。你实际上需要思考的方式是,在这个例子中,我们将从一种心态的改变开始,也就是存储库。我接触的很多客户,我尽我所能地告诉他们,存储库是解决这个问题的关键。我遇到的许多客户说,“我们有一个本地存储库”,我将讨论存储库类型。“然后我有远程存储库来代理,这就是我所做的。”
问题是,存储库可以做的远不止这些。我的工作之一就是我有另一个演讲,你们可以去我们的YouTube页面看看。它实际上被称为五个P,我在这方面做了更深入的探讨。但是我想确保您理解存储库的含义以及如何将它们用于您的SDLC。我将给你们看一个例子,当我生成一个非常简单的NuGet包的时候我今天构建了这个包来展示我如何利用它来给我生成的所有东西一个完整的系统记录。
因此,在Artifactory中,我们有存储库类型。就像我说的,我们有27种原生支持的包类型,但它们在逻辑上是分开的。所以我们有本地存储库。这些是您存储二进制文件、构建文件和对您很重要的文件的地方。这些是你拥有的东西。这是本地化的存储库,我将在这里向您展示如何使用这些本地存储库来模拟SDLC。然后是远程存储库。远程存储库是惰性代理。它们基本上是第三方存储库的惰性缓存。
在这个例子中,我将通过Artifactory代理NuGet Gallery,我将向你们展示为什么要这样做,第一。第二,我会向你们展示它背后的所有信息,我也会向你们展示其他方面,你们可以利用这些信息来更好地管理。然后我们有了虚拟仓库。虚拟存储库是本地和远程存储库的组合。我要给你们看一个我今天要用的例子。这使您能够将SDLC封装到虚拟存储库中,但也允许跨团队依赖。
我将向您展示如何添加,比如说,另一个团队的生产存储库作为存储库,比如,您的项目存储库,这样您就总是使用为另一个团队生产的最新版本。举个例子,你可能正在创建一个web应用程序,有一个团队为你的web应用程序生成身份验证模块。在过去,您必须仔细检查并找出一种方法来确保始终使用该库的最新和最好的版本,以便您的应用程序符合您为外部化发行版所做的标准。
那么,在这种情况下,我可以将另一个团队的生产存储库包含到我的构建中,并且基于解析顺序,我可以始终确保我拥有该团队生成的版本的最新生产版本。这样我就有了更简单的方法来处理我自己产品线的跨团队依赖关系。看这里,我可能有开发,QA,测试,登台,发布,我可以设计我的存储库来模拟实际的SDLC。因为所有的东西都与元数据相关联,你可以浏览。我马上会给你们看一个推广API的例子如果你要在CI的构建步骤中做的话。
同时,我还将向您展示如何使用JFrog CLI工具将二进制文件从一个仓库提升到另一个仓库,以及您从中获得的好处。如果我给你看推广API是什么样子如果你在做一个Jenkins build的例子,你可以看到我在这里有一些元数据在这里我要执行一个步骤说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 repos。看这里,我有一个NuGet本地回购。这是我将要发布我的构建的地方。这是我要放NuGet包的地方,我有专有的NuGet包。在这种情况下,我有一个生产存储库,我将向您展示推广API,我将把实际的NuGet包从本地仓库推广到生产存储库,以便其他团队可以使用它。然后是远程存储库。
如果你看这里,我在这里设置了NuGet远程存储库我连接到nuget.org,我把它们拉进来。但同时,我要向你们展示,我实际上要通过x射线处理所有的NuGet包通过我的一系列规则。现在我有了一个远程存储库和一个本地存储库。我今天要使用的是我的虚拟存储库。点击这里,你可以看到我在这里设置了一个NuGet存储库。如果你看的话,我有NuGet本地的。我有NuGet产品,我还有一个NuGet遥控器。所以我把这三个代码都封装在一个标准的NuGet存储库中,今天我将在这里做所有的工作。
如果您看一下底部,我还将向您展示我实际上在默认情况下部署到新的本地存储库。现在我可以在这里做一系列的动作,比如我可以加入模式,排除模式。我还可以做强制认证如果它是需要认证的第三方资源。但是现在,我要保持标准化,这是我实际使用的。那么,让我们来看看Artifactory内部的存储库。那么让我们转到Artifact浏览器。如果你们使用Artifactory的时间足够长,就会知道我们保持了浏览器的原样,但我们对其进行了增强。
现在让我们看看我的NuGet本地。就在这里。这是我的NuGet虚拟存储库。如果你看这里,如果你想知道如何实现它,它非常简单。人工工厂有个小按钮,上面写着设置我。当你说设置我的时候,我们实际上会给你所有的说明,告诉你如何设置它,在各种方法中使用。我们今天要使用的方法是设置NuGet CLI配置,但是你也可以在版本3的API NuGet CLI中这样做。你甚至可以进入并设置为Visual Studio。
一旦你完成了这个并设置了这个,所有标准的东西,比如NuGet Push和NuGet Install都会正常运行,你可以定义Artifactory作为你的标准源代码。以我的例子来说,看这里,你可以通过用户名密码来使它规范化。但在我这里,我要登录,它允许我输入用户名和混淆后的密码。在这种情况下,这是我的加密密码。我们复制一下,看看我的资料来源。
这是命令行中的项目。之前,当我给你们看的时候,如果你们看,这里没有提到Artifactory。这里没有任何信息表明我将使用Artifactory来代理我的二进制文件,以确保我拥有的任何第三方源都在这里。如果我回去,我可以粘贴那个NuGet命令那个是由Artifactory提供的。如果我点击它,它会进入并成功添加。现在,如果我们进入这里,你会看到我们实际上已经将这些信息存储为这个项目的一部分。
现在我们回到这里,复制我的setapi key。当我设置我的API密钥时,我也可以这样放置它。现在它被保存为我的图像源的一部分。现在我的项目都设置好了。现在我已经设置好了,可以开始使用Artifactory,如果我想的话,我甚至可以进去看看NuGet Gallery。我可以去找,比如,戴珀。这里我有一个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.
现在它要把它放入人工工厂本身。如果我在这里执行LS,你可以看到实际上Dapper现在已经安装到我的项目中了。如果我们回到Artifactory我要刷新一下向你们展示这里的内部,我可以展开它。这是Dapper。这是我检查过的软件包,我安装了它。现在它实际上在内部被引用。现在我已经通过Artifactory代理了这个NuGet包,我有一个副本。这包含了所有的信息,比如它的依赖关系。如果你看这里,它实际上有两个可靠的依赖关系。
这是所有的包裹信息。如果我想,我可以修改acl,来决定谁可以访问这个。我还可以添加额外的元数据属性,但是我已经从NuGet Gallery收集了大量的信息,所以我有一个记录系统,我在这里所做的一切都是可用的。这很好。现在我有办法进去了。现在假设我想进去看看它还有什么。我们做的一件事是,在我们平台的新版本中,我们有了包查看器。我们的包查看器可以让您查看完成了哪些包,因此它就像一个目录。如果我说戴珀,我就可以进去了。我拼对了吗? Or maybe it’s not available in here just yet. It’s not available in here just yet.
有时需要一分钟才能完成。但是让我们进去吧,不多说了,因为时间紧迫,我现在就给你们看。我将自己生成一个NuGet构建。我要进去,我要去拿一些。我在这里做了一件很有用的事。如果你看这里,我要进去,我要在这里构建我的包。这是我的NuGet包。我要把这个打包了。顺便说一下,你会看到这里出现一些小错误。给它一分钟。
一旦完成构建,这就是令人兴奋的部分。是的,我有错误。我明白了。现在我要把这个包发布到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 local,你可以看到我的NuGet local。这是包裹本身。现在我可以通过x射线扫描它,但应该没有任何。实际上这里有一个违规,因为我设置了一个许可值,在这种情况下,我不接受Apache许可。这只是让我知道这里有违例。所以我扫描了我自己的包裹,发现了一个我自己的错误。但这一切都很棒。但这都是标准的NuGet包我想保存并利用它。但是如果我想要更多关于它的信息呢?如果我想做些不同的事情呢?
让我们来看看。让我们把这里的视野清理一下,这样你就能看得更清楚。这是我创建的HelloWorld包。假设我想做一些不同的事情。现在我想知道这个包实际上是如何构造的。我想要存储一个记录系统,这样我就知道东西是如何被利用的。让我回到这里,我们来做这个。我要把这个包上传到Artifactory稍微有些不同。在这种情况下,我要把它看一遍,然后签字。
我要上传这个包,这是那个NuGet包,到我的NuGet本地,我已经有了。它允许我重写,因为我控制它。我要给它起一个构建名。我将命名为NuGetHelloFrog,并将其命名为build number one。所以我现在要把它变成一个建筑。现在我可以在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。如果你看这里,上面写着人造的。袋HelloFrog。NuGetHelloFrog,这是我做的构建,构建1。我们开始吧。好吧。我现在已经收集了所有关于它的信息。现在我要讲BCE。现在BCE是建立收集环境信息。我要做的是围绕这个build创建一个build对象,现在我们来做这个。 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消失了。让我们暂时转到生产环境,它位于我的生产存储库中。所以我也可以有一份副本。但在这种情况下,我实际上是在移动这个建筑。如果我回到构建浏览器,我可以向你们展示这里的构建现在实际上有一个发布历史记录说这个产品实际上已经发布了。
现在我可以做另一件事了。如果我想的话,我甚至可以进去。我可以说:“你知道吗?我想改变它的状态说,也许不是释放,也许我想做,说,保持如果我们那样做,我就可以进去了。如果我再次退出并返回,因为在这个例子中没有真正的刷新,我可以进入,这应该是。实际上,我已经完成了另一个。我可以进入我的释放,你可以看到我在整个例子中经历的每一个阶段。这样我就可以有记录系统记录我所做的每件事。我可以有多个版本,如果我想的话,再做一次。
其中一个好处是,如果我想,我可以创建另一个模型。我们来做一下。让我们回过头来,围绕这个创建一个新版本。所以我有了我的新包裹。我要把这个换成2号。好吧。所以我创建了二号建筑。对我来说,我要去收集所有的信息。我将获取GitHub信息。我只是想给你们展示一下做一些改变是什么样子的。所以让我们去收集所有的环境和系统信息。 Let’s get its dependencies.
我按错了按钮。没关系。现在让我们发布它,构建2。回到构建浏览器,回到NuGetHelloFrog。你可以看到我现在有了二号建筑。它没有发布历史记录,但如果我想,我也可以进去看看当前的发布状态,如果我点击它。不应该有任何改变。但如果您看这里,我可以向您展示,如果出现问题,我可以在两个NuGet包之间执行差异操作。
如果你进去看一下,就像我说的,你也可以在做代码内容方面做这个。我也可以向你们展示,我也可以建立策略来实际评估我所有的二进制文件。如果我这样做了,我做的其中一件事是,我将所有有问题的信息发布到我的Slack上。所以我实际上是在用Artifactory来宣传信息,这样我就能看到是否有什么邪恶的东西。
除此之外,顺便说一下,我想向你们展示的是在Artifactory下我们这里还有一个很好的东西,就是我们之前讨论过的NuGet Gallery。如果我想展示我的专有包,我可以说hello,这是我的HelloFrog NuGet包。你可以看到它被x光扫描过。如果我点击这里,你可以看到,在这个例子中,我有一个可用的版本因为我还没有将它推广到实际使用中。我可以点击这里,向你们展示所有的信息这是我之前做过的其他单独的构建,这实际上是。你可以看到它背后所有的x射线数据。所以你可以看到我关于它的所有信息。
你可以看到它是否被分发出去了。如果我在某个地方用这个,我可以这样做。然后,当然,我有这个现在被引用的存储库。这是我的本地回购,这是我的生产回购。我知道这是所有事情的高级视图,但我只是想说明您可以使用一个标准的NuGet包发布到Artifactory中。你可以把它转换成一个构建,这样你就有了更多的信息。你也可以浏览并发布它并将其作为一系列步骤。如果你看这里,你可以看到我有各种状态,状态实际上反映了它在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中获取安全数据,这样他们就可以在你使用的产品或库进入你的CI流程之前制定任何潜在的错误,从而为你节省大量的钱,看起来像一个摇滚明星。
我的演讲基本上到此结束。我只是想提一下。但我也想说的一件事是,我们在圣何塞有一件大事要做,在不久的将来。我们有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会议。然后,我们还有一些其他的,它们在我们的页面上。我一时想不起来,因为我很糟糕。
这就是我今天的演讲。谢谢大家的出席。我希望大家都喜欢,那就是我。欢呼,每一个人。保持软件的流动性。
