先进的包装选项与JFrog CLI
网络研讨会描述:
在本次网络研讨会中,我们将了解如何使用JFrog CLI作为二进制文件的打包工具。在某些情况下,我们的应用程序在打包时需要独特的布局。这个包应该包括各种二进制文件和带有元数据的测试文件,它们被安排在特定的目录中。
包的各个组件有时有自己的版本,它们可以通过不同的过程创建。如果所有这些组件都在Artifactory中管理,JFrog CLI可以配置为选择正确的组件,并根据定义的布局将它们打包在一起。
额外的资源:2022世界杯阿根廷预选赛赛程
会议记录
非常酷。所以,正如我所说,我们今天的网络研讨会的重点是JFrog CLI的高级打包选项。JFrog CLI是一个常用的行工具,基本上允许两个主要功能。它基本上允许作为JFrog平台的一部分集成构建集成特性,但它也允许一些非常酷的DevOps自动化和主要围绕打包和管理文件的特性。这将是我们今天的重点。我将向你们展示一些我们可以做的好事情以及如何利用它。
在我们开始之前,先简单介绍一下我自己以及我在JFrog中的角色。我在JFrog领导生态系统团队工程。我们是一个研发团队。我们所关注的是开发和维护能够集成JFrog平台的工具,我们很快就会看到,将JFrog平台与各种各样的工具和组件集成在一起,这些工具和组件是我们DevOps环境或环境的一部分。例如,CI服务器、集成、构建工具、代码。我们公开了api,这些api可以从自动化代码中使用,与JFrog平台集成,我们也在维护JFrog CLI,这将是我们今天网络研讨会的重点。
简单介绍一下我自己。我对技术很有激情,尤其是软件。我关心我们在地球上可持续发展的未来,我相信软件在这方面扮演着重要的角色,帮助我们开发所需的技术,所需的能力,为了一个更美好的未来,为了一个美好的未来。
JFrog的使命基本上是让我们的软件顺利交付,软件是从实际开发阶段开发出来的,就像编写代码的开发人员一样。我们有帮助开发人员的工具,可以将JFrog平台允许的一些功能集成到ide中。我们已经集成了许多现在开发人员使用的流行ide, Intellij, Eclipse, VS Code, Visual Studio,很快也会集成WebStorm和GoLand。
此外,通过JFrog平台,JFrog平台基本上支持与构建软件有关的所有事情。它为您管理二进制文件。它扫描它们的安全漏洞,甚至负责软件的实际交付和分发到远程位置。所以所有这些基本上都支持了我们的愿景,即我们所说的JFrog使软件变得流动,基本上允许以易于维护和快速周期交付软件,基本上允许开发人员尽快到达需要运行软件的服务器或需要该软件的设备。
让我们从高层次上稍微谈谈JFrog平台,了解它是什么,然后看看JFrog CLI是如何与平台配合工作的。所以JFrog平台的创建基本上是为了把所有JFrog的核心产品放在一个统一的UI下,统一的体验,基本上允许你在一个平台下顺利地使用JFrog提供的各种产品的所有功能,有一个用户管理,一种体验,一个UI基本上可以处理所有事情。hth华体会最新官方网站
此外,安全性现在是JFrog平台的头等公民,因此我们利用JFrog Xray来扫描由平台管理和托管的二进制文件。你可以配置或让JFrog x射线扫描平台上传和管理的所有内容,或者其中的一部分。除此之外,我们现在也有JFrog pipeline作为JFrog平台的一部分,它允许你创建工作流,基于YAML的工作流,以便管理一切。所有的工作流程,所有的ci,基本上控制一切。
现在,如果我们看下一张幻灯片,看看高层次的JFrog平台。在左边,你有你的代码回购。这可以是Bitbucket或GitHub或任何你想用来管理源代码的存储库或源代码控制。然后JFrog Artifactory管理由源代码创建的二进制文件。它持有它们,将它们存储在具有特定访问权限的存储库中,基本上允许这些二进制文件或那些构建从一个存储库迁移到另一个存储库,以支持软件的生命周期。例如,您的二进制文件可以在开发回购中,然后当它们准备就绪时,它们可以转移到登台回购,反之亦然。I是一个非常灵活的结构,允许您支持适合您组织的任何生命周期。当然,您可以对支持该功能的存储库拥有特定的访问权限。
然后JFrog Xray可以直接访问这些二进制文件,它可以扫描它们的安全漏洞和许可问题,所以你可以定义这些策略,以确保软件是安全的、良好的、没有错误的。JFrog x射线可以整合,你可以把这个扫描整合到开发过程的不同阶段,构建过程,交付过程。
正如我前面提到的,即使是在IDE阶段,当开发人员正在开发代码时,IDE也可以与JFrog Xray集成,并向开发人员提供有关依赖关系的信息,项目正在使用的特定依赖关系。然后x射线也可以作为CI流程的一部分集成。不管你使用的是哪个CI引擎,JFrog pipeline、Jenkins、Azure DevOps还是其他什么引擎。您可以设置JFrog Xray扫描您的构建,以确保它们是安全的,如果发现特定的漏洞,您甚至可以选择进一步构建或触发其他事件。一旦你的软件准备好发布了,那么JFrog distribution就会负责将软件发布到远程位置的繁重工作。
我们允许在远程位置设置边缘节点,JFrog Distribution将负责将软件交付给这些边缘节点。从那里,可以将软件部署到将要分发软件的各种代理和机器上。正如我所说,所有这些都可以由JFrog管线控制,整个工作流程,基本上发生的每件事都是生命周期的一部分,而且任务控制和洞察为你提供了一个作为系统和平台的一部分正在进行的过程的视图。你基本上可以通过任务控制来监控,监控你的构建和作为系统一部分运行的重要流程。
现在让我们稍微谈谈JFrog CLI。JFrog CLI是一个组件。它是一个通用的行组件,它与JFrog平台集成在一起,基本上你可以在任何地方运行它。您可以从构建代理运行它。您可以从您的自动化机器运行它。它基本上是JFrog平台的一个扩展。这是一种将你的代理、你的构建机器与JFrog平台连接起来的方式,这种方式既简单又灵活。因为它是一个普通的直线工具,而且它包含的功能可以很容易地与JFrog平台集成,所以它基本上可以嵌入到任何地方。我们将重点介绍JFrog CLI在您创建包时可以提供的一些方面或功能子集,并看看我们如何做到这一点。
所以JFrog CLI,简单地说,它包含了一个详细的连接存储。它可以作为JFrog平台的一部分安全地存储服务的详细信息。今天我们来看看JFrog CLI是如何与Artifactory协同工作的。它还包括对文件、工件进行操作的能力。所以这些文件可以上传到JFrog Artifactory。它们可以下载。它们可以被移动,我们可以用它们做其他事情,比如标记那些工件,这样你就可以使用它们,把它们打包在一起,寻找它们,搜索它们,从而创建你的最终包。当我们谈论元数据时,它允许一种简单的方法在那些工件上设置元数据,这也是我们今天要看的东西。
JFrog CLI支持文件规格。它基本上是一个相邻的结构。它就像一种描述操作的方法,或者根据特定的条件精确指定要对哪些文件进行各种操作。它还包括与包管理器的集成,以创建构建信息。这不是我们今天要讲的内容。如果我们在最后有时间,我们将简要地讨论一下,但是JFrog CLI,因为它与JFrog平台紧密集成,基本上可以增强流行的包管理器,像NuGet,像Maven,像Gradle和PM, Docker,和其他,为了用更多的元数据丰富工件,基本上有一个结构,我们称之为构建信息。它就像材料的构建,实际上可以保存,存储在Artifactory中,以提供关于工件的更多数据。您可以将构建作为更高级别的抽象来处理,而不是处理特定的工件。正如您所知道的,这也是JFrog CLI喜欢做的事情。当然,还有更多。
有了这些,我们将直接进入演示。我认为最好的方式来真正看到这个,看到所有的行动,实际上是看一个现场演示。现在我正在分享我的屏幕。我们今天要看的大部分演示都是通过终端,通过控制台。我将尝试演示JFrog CLI可以做的有趣的事情。当然,我今天所解释的所有内容都包含在在线文档中,所以请随意去查看JFrog CLI文档。我们确保所有东西都在那里。我们开始吧。
所以我在我的终端上安装了JFrog CLI。它由JFrog命令访问。现在我正在显示这个版本。让我们从实际的存储开始,也就是我存储在JFrog CLI中的Artifactory服务器。我用JFrog,然后用C来配置和显示。对不起。JFrog RT为Artifactory,然后C为show。然后它向我展示了所有Artifactory服务器的详细信息。每个服务器都有自己的服务器ID和URL、连接细节和其他重要信息。注意,这里已经配置了多个服务器,其中一个服务器被标记为默认值。 That’s my local Artifactory server, which is just for the sake of this demo I’m running on my local machine. That’s the one that I’m going to work with.
当然,我可以更改默认服务器。我可以说,我想使用这里的另一个Artifactory服务器。但是让我们回到我正在使用的本地Artifactory服务器。我们先从上传开始吧?让我们从搜索开始?因此Artifactory在存储库中托管二进制文件。这是我的Artifactory服务器。我当然可以到UI。让我登录一下。我可以在工件视图上看到我所有的工件,所有的存储库。 I’m going to use a repository which I previously created, which is called generic local. Let’s start by searching the content of this repository, JFrog RPF for search, and then generic local, and it does the search.
我现在在这个仓库里没有任何工件。基本上是空的。所以我要做的第一件事就是开始上传工件,只是为了向你展示它是如何完成的。我这里有一些目录。我有一个工件目录和一个弧目录,其中包括档案。如果我正在查看artifacts目录的内容,您会看到,它在这里包含了一些要上传到Artifactory的文件和归档文件。
对不起,弧。这里我有一堆档案。我刚刚为这个演示创建了几个zip文件。我可以上传那些文件。我可以指定所有的参数和标记。通过命令参数,我可以执行day frog、RT,然后上传,然后说,嘿,把我在这个目录中的所有工件上传到我的通用本地存储库中。我能做到。我可以让它就这样,或者我可以说,嘿,把这个上传到Artifactory的一个特定文件夹中,然后就会发生这样的事情。上传了42个文件。为了演示的方便,我还要把它们都删掉。 I’m basically going to delete the whole content of my generic local repository, and that’s it. It says one, because it’s basically deleted one folder, the folder that I created named A.
我想给你们展示另一种方法。JFrog CLI还支持一种我们称之为文件规范的结构。在这里,我为这个演示创建了一些文件规范。如果我进入规格,你可以看到我创建的实际规格。它非常容易使用,使用文件规格。让我们,举个例子,看看我创建的下载规范让你们了解一下文件规范是什么。这是我能想到的下载文件的最简单的文件规范。基本上,它在这里说的是,将我的通用本地存储库中的所有文件下载到我想在本地创建的目录中,这个目录称为Out。这就是它要做的,我们来做吧。我要运行JFrog,然后RT,然后DL for download - spec。
你知道吗?往上走一个目录,因为我想在这里创建它。我想在这里添加要创建的Out目录。JFrog RT download minus, minus spec,然后它在这个目录中,然后下载spec。你可以用任何你想要的名字来命名文件spec。基本上,我们可以看到没有文件被下载。让我们来看看为什么。哦,那是因为我基本上删除了我的通用文件夹的所有内容,所以那里什么都没有。我们把这些文件上传到这里。我想这里还有我创建的上传规范。
是的,让我们看看这个上传规范,它和我们之前看到的下载规范非常相似。它有两个部分。与下载规范一样,它也包括模式和目标。在这里,我将告诉JFrog CLI基本上选择所有文件,其中包括一个B,在名称中的某个地方的字母B,并将它们上传到一个名为a的目录中的假想存储库中。然后我对所有文件做同样的事情,其中包括a,并将它们上传到这个存储库中的一个名为B的目录中。当然,你可以在这里选择任何你喜欢的模式,让我们做这个,B,然后上传- spec,然后我要做这个,为它提供上传规范,然后它上传所有东西。
现在我有78个文件了。让我们也做一个搜索,以防你想知道到底上传了什么。JFrog RTS,然后我还可以使用文件规范进行搜索。但为了简单起见,我也可以把实际存储库的名称放在这里,然后得到我上传的所有文件。现在我想使用我的下载规范,我将使用JFrog RT DL,然后减去,减去规范,并提供下载规范,现在,我们这里有下载的文件。
如果你还记得,我下载了它们。我在规范中设置了下载这些文件。不好意思,下载这些文件。这是一个下载规范到一个名为Out的目录。让我们看看这里产生了什么。好吧,看到了吗?它基本上保持了相同的目录结构。我这里有一个A目录和一个b目录。如果我看A里面,我看到所有的文件,b也是一样。我还可以使用一个减号,减号平面选项添加到规范甚至命令本身,这样基本上就可以下载文件,而不需要Artifactory里面的目录结构。
现在让我们把事情变得更有趣一点。假设我想要上传这些文件,并且在上传它们的同时,我想要用属性标记它们,这些属性稍后将帮助我找到我想要的工件,或者专门下载具有这些属性的文件。我们来做一下。我回到我的上传规范,假设我想用特定的属性标记所有上传到这个目录的文件。我只是在文件规范中添加了一些道具。
假设我想说那些工件的状态已经被验证了。我可以选择任何名称或任何值,还可以在这里放置多个变量,用分号分隔,甚至可以通过用逗号分隔值来为特定属性提供多个值。但现在这就是我想做的一切。我上传到B目录的工件,我现在不想用任何属性标记它们。我们来做一下。现在我返回并再次运行上传命令,现在它上传了这些文件。这次它使用了这些属性的上传规范。让我们看一下搜索,看看Artifactory中的属性的实际情况。我现在做的是通用搜索,我现在做的是普通搜索。注意到A目录中的那些文件,现在它们有了这个特定的属性。
让我们看看我是否能找到这里的artifact。这里,B目录中的artifact不包括那些属性。我当然可以说,我只想搜索B目录下的文件。当然,我将看到没有属性的文件。让你们了解一下属性可以做什么,当然现在我可以使用下载规范来下载文件,不仅仅是根据路径,因为我们之前看到过,你可以使用通配符,你还可以为这些文件使用属性。
让我们看看还能用文件规格做些什么。假设我想把这些文件上传到一个动态目录中。假设我不想将这些文件上传到一个名为a的目录中,但我想在运行该命令时设置目录名。所以我可以在这里用花括号写上一美元然后写上我想要提供的任何变量的名字。然后我就可以像这样运行命令了。让我们回到上传命令,我可以说- - spec,然后指定我想要发送的变量。我想说,好吧,亲爱的名字不会是a,我不知道,我亲爱的,我的通讯录。我们再来一次。这些文件这次被上传了,希望是上传到了不同的目录。现在让我们再次运行搜索命令。 Now I’m expecting those files to be here.
他们不是吗?哦,看,它上传到了这里。可能我做了什么…我的规格有问题。所以美元…亲爱的。对,这里有多个双花括号。现在我相信这是可行的。让我们再次运行该命令。现在让我们再次搜索。
哦,是的,它确实找到了他们。它确实把它们放在了正确的目录,我亲爱的,正如你在这里看到的。让我们看看为什么搜索命令,我做错了什么?我亲爱的。是的,我应该包括一个斜杠在结束,以便让JFrog CLI知道,基本上我正在搜索的是My Dear文件夹内的所有内容,我不是在寻找一个文件,其名称是My Dear。
如您所见,您可以使用具有任何名称的任何变量。但是如果我们想要添加更多,我们想要仍然有我们的目标动态,但是这次我们想要使用文件的源路径的一部分或本地目录中的路径,并使用它包含在目标路径中。默认情况下,如果你指定upload minus, - flat false,这些文件会连同它们的文件系统结构一起上传。但假设你想要做一些更有趣的事情来支持你想要使用的布局。
让我们看。假设我想,让我们看看我的工件,假设我想修改文件的名字。我希望文件仍然按照它的名字上传,但我想给这个文件添加一个后缀。让我们试着这样做。我要回到我的上传文件规范。这里,如你所见,我在说,好吧,请将它上传到我提供给你的目录中,但我也想使用……让我们这样做。好吧,我们试试这个。我希望这有用。
我想说,好吧,这是文件名。我要让这个图形更复杂一点。我是说,好吧,把文件都拿出来。我不关心它们在哪个目录下。模式的这一部分包含实际的文件名。我想说,好吧,选择文件的这一部分,所以我用括号把它括起来。然后我说,好吧,这里,使用文件的这一部分。我通过添加一些我们称之为占位符的东西来做到这一点。
这里的数字1,意味着我想让目标拾取模式内的第一部分,也就是用括号括起来的第一部分。如果这里有额外的括号,比如,如果我有第二组括号,那么我就可以用数字2来引用它。但是现在,为了这个例子,我只想取这个文件名,我想使用它,但我想添加它。我想在文件的具体内容上加下划线,然后加B。假设这就是我想做的。让我们看看这是否可行。让我们看看现在会发生什么。让我们再次运行我的上传。我仍然在规范VARs提供My Dear文件夹,让我们看看它是否有效。
好的。现在,让我们继续看看My Dear文件夹中的所有文件,我再次运行搜索,JFrog RT,然后s,然后我想看看文件在generic local,然后My Dear。那我们来看看那些文件。看看发生了什么。所有文件都上传了完全相同的名称,但现在在最后加了下划线D。这就是占位符的力量。它们基本上允许您使用初始模式的一部分,然后将它们用作实际目标模式的一部分。
好了,我们继续。我们还能用什么?我们最近为下载添加了详细的摘要,所以我们可以继续,让我们进行下载,然后说,好吧,我把它弄丢了。我再运行一遍。JFrog RT,然后DL,下载我的通用本地存储库中的所有文件。我想下载A目录下的文件。让我们把它们都放到我选择的新目录中。我们叫它Out Q减去,减去详细的总结。
这将做什么,基本上也为我提供了所有文件下载的摘要。所有这些都是相邻的格式,这基本上允许我很容易地将它传递给其他进程或其他我想添加的东西,假设我只想看到目标部分。我们来试着做一下。这里我要用到一个工具,我很喜欢它。它非常适合解析模式。首先,让我们看看返回什么。它会返回所有文件的数组。然后我想说,好吧,我只想要目标。点,目标3。
看看我做错了什么。-, -。让我们再看一遍。哦,这个返回了数组,这里,基本上我需要添加的是。通过这个。好的,这里的JQ语法有点小混乱。但是,基本上JQ基本上,只是忘记了语法,但基本上JQ允许你提取实际模式的部分,并对它们进行分析,这是现场演示问题的一部分,不幸的是,这让你忘记了一些东西。
好的。我们来看看排序,好吗?基本上,你还可以使用排序,排序来存储文件。让我们做之前做过的搜索,JFrog RTS, generic local。是的,基本上提供了所有的文件。但是假设我只想获取最近的文件。让我们继续在这里创建并上传一个新文件到我的通用本地存储库中。我在这里创建一个新文件。这就是它。然后我要把它上传到根目录。 It stopped here correctly, right into the root of my generic local repository, and there we go. This is basically the most, the newest file, that was created there.
现在让我们使用搜索来只获取最近的文件。我要做的是,我再说一遍,好吧,我要搜索。这次我想说减号,减号,根据创建排序。我想知道起始顺序,发送顺序。然后我想说负,负,限1。哦,是的。负号,负号,存储顺序是…输入错误。一般本地,减号,减号,存储,创建,减号,减号,按桌子排序。我看一下,我写错了什么? It says plug provided but not defined, minus, minus. Yeah. Not ordered by its sort order. About that. There we go. We got only the new file.
好的。让我们看一些更有趣的事情。我现在要加快速度这样我们就有时间看这些东西了。我们可以使用排除法。我可以说,好吧,我想下载,当我下载文件时,我只想下载,我想排除我下载的一些文件。我们来看看怎么做。看看我们有什么。我想我在这里已经有一个规格,包括这个。
好了,看看这个。这与我们之前的实际规范相对相似,但现在我添加了排除。排除可以得到一个排除模式列表。这里我基本上是说,排除所有在泛型local中,在A目录中的东西,也排除所有属于这个模式的东西。我不想得到所有的Read Me文件,我现在不想使用一个模式,作为一个占位符,只从一般的本地获取所有的东西,并排除那些文件。让我们快速运行一下。我要把这个上传到一个新目录,叫out3 RT CL然后- spec,这当然有用了。如果我们继续查看这个目录,它将排除这些文件。
还有什么?您可以使用符号链接。如果你有一个想要上传的符号链接,并且你想把它上传到Artifactory,那么默认情况下,当你上传内容时,你会上传符号链接引用的文件,但是下载命令也支持…也支持…,我们就报废吧。
默认情况下,让我们来看看。让我们从上传开始,因为这基本上就是我想要展示的。当您上传文件时,默认情况下,符号链接的值为false,但如果您将符号链接设置为true,那么这些符号链接将实际上传到Artifactory。然后当你下载的时候,你可以说,下载命令基本上会发现上传到Artifactory的是一个符号链接,然后你可以选择进行验证,来确保你下载的符号链接引用了正确的文件带有正确的校验和,也就是上传的文件。
我们没有太多的时间,所以我将简要地讨论一些您可以使用的更好的功能,这些功能可以帮助您管理您的文件和自动化使用Artifactory的一切。有一个很好的功能叫同步删除,我想展示给你们看。同步删除的作用是,它基本上允许你说,好吧,我要下载一个特定文件夹的内容到本地文件系统,但我想确保本地文件系统基本上与我从Artifactory下载的内容是同步的,所以我想删除这个目录下的所有东西,而Artifactory中不存在。当我上传文件时我也可以这样做我想要确保我的上传目的地是同步的基本上只包括我上传的文件,其他的都是清理。同步删除选项支持这两个功能。
你可以看到这里。因此同步删除上传和下载命令基本上指定了一个根路径,您希望将包同步到该根路径。显然,JFrog CLI有更多的功能。您可以在存档内搜索,也可以根据它们指定的存档项下载存档。
是的,基本上,我希望我在这里成功地向您展示了一些高级功能或打包选项,它们允许您通过上传和下载来管理Artifactory文件。您可以使用带有复制删除设置道具的文件规格来完成同样的操作。基本上,我今天在这里描述的所有功能都可以使用文件规范或命令行参数来完成。
好了,我想,如果你们有任何问题,我们将进入提问环节,所以,如果我们有任何问题,我很乐意回答。
我们有很多问题,所以我们现在会尽可能多地回答。对于我们无法回答的问题,我们将通过电子邮件回答您。其中一个问题是,关于Artifactory支持所有类型的存储库,您对Artifactory上的Alpine本地存储库的可用性有什么见解吗?有没有一个具体的里程碑?
好的。所以,是的。你基本上是在问我一个计划在Artifactory中发布的功能。我想我们会的,这个问题最好稍后在线下回答,因为基本上我不是公司里回答关于Artifactory未来路线图项目的合适人选,所以我们一定会和这里的相关产品经理核实并提供给你答案。
另一个问题是,是否可以使用JFrog CLI从Bamboo或Jenkins中发布、构建信息,以及如何发布?
是的,我们还没有看到构建信息,JFrog CLI的构建信息集成,但是基本上……让我再分享一下我的屏幕。JFrog CLI,你可以在JFrog CLI中运行很多命令,并接收一个构建名称和一个构建号……让我们以上传命令为例。所以这个命令也。好吧,它在这里。好了。构建名称和构建号。类似地,许多命令都需要生成名称和生成号,以及与各种流行的包管理器集成的命令。然后这个构建信息可以上传到Artifactory。
现在,Jenkins和Bamboo都通过Jenkins Artifactory插件和Bamboo Artifactory插件支持构建信息。它们包括一个内置的支持。你也可以直接在Bamboo中使用JFrog CLI,但是,这基本上意味着你必须通过一个公共的行接口自己执行它们。
例如,在Jenkins的管道中,您可以确保安装了JFrog CLI,只需运行JFrog CLI命令就可以做任何您想做的事情。你也可以用Bamboo做同样的事情。但如果你问JFrog CLI是否与Jenkins和Bamboo紧密集成,答案是否定的。然而,JFrog CLI被我们维护的其他CI解决方案所使用,GitHub通过设置,JFrog CLI被Azure DevOps使用。但是对于Jenkins和Bamboo,我们有一个集成,就像一个内置的本地集成插件与这些功能,然后这就是为什么它不利用JFrog CLI本机。我希望我回答了你的问题。
好吧,我看到有些人问了下面这个问题。是否可以将JFrog CLI与Docker存储库一起使用?
是的,当然。当然。你可以这样做。再次查看屏幕。所以JFrog CLI支持两个与Docker相关的命令。它是JFrog RT DockerPush,它基本上允许将Docker映像推入Artifactory,还有Docker- pull命令,它从Artifactory的存储库中拉出Docker映像。JFrog CLI在这里所做的是利用Docker客户端,但它确保为这些操作收集和记录构建信息。如果你从Artifactory中提取Docker映像,这些Docker映像的所有层都将被记录为构建依赖项,作为构建信息的一部分。当你推送Docker映像时,层会被记录为工件,基础层也会被记录为依赖项。是的。
从那时起,你就有了一个Docker,一个用于Docker构建的建筑。对于其他包管理器也是如此。这是相同的概念,基本上提供一个构建名称和一个构建号或运行命令,如Docker- push或Docker Pull。然后收集所有构建信息并在本地生成。然后当你准备好了,当你不想向构建中添加任何东西时,你只需要运行JFrog RT构建推送,构建发布命令,它基本上会发布构建。
好的。也许我们还有时间再问一个问题。是否有限制的文件数量,我可以上传或下载与JFrog CLI?
答案是否定的。你上传或下载的文件数量不受限制。让我来描述一下它是如何工作的。当您将文件上传到Artifactory时,您为从文件系统收集的文件提供了一个模式,然后JFrog CLI就会遍历文件系统中的文件结构以及与他们刚刚上传到Artifactory的模式匹配的文件,同时搜索还在继续。对于下载,基本上JFrog CLI会发出一个AQL查询,返回下载文件的列表,当这个列表被JFrog CLI处理和解析时,这些文件开始下载。基本上,你没有限制。你唯一的限制是。我不知道,就是你所使用的空间和你愿意等待手术发生的时间。
我再加上,所有东西都是校验和,通过校验和优化。也就是下载和上传。如果这些文件已经存在于Artifactory中,它们将不会被真正上传。字节不会实际传输到Artifactory。它只是添加到新模式Artifactory中的另一个引用,下载也是如此,几乎是一样的。如果您正在下载的文件已经存在于您要求下载的位置,则将运行校验和计算,如果文件在那里,则不会下载。从这个意义上说,一切都是优化的。
在我们结束之前,我们要宣布一件事。我想让你们知道我们有JFrog swamp,我们的用户会议。它将上线,从6月23日到24日或6月30日到7月1日。您有机会接受现场DevOps培训,参加类似于我们在这里所做的技术会议,并了解DevOps的未来和正在发生的一切,从云原生DevOps到DevSecOps以及介于两者之间的一切。是的,我只是想提醒大家,我们希望能在现场见到大家。当然,您可以查看详细信息,在线查看详细信息,并进行注册。
好的。谢谢,正如他提到的,你们的资源列表中有swampp的链接,所以你们可以在swampup.com上了解更多。2022世界杯阿根廷预选赛赛程
谢谢你,雷耶,精彩的演讲。
谢谢大家今天的到来。对于我们没有回答的问题,我们最晚会在今天或明天通过邮件回复您。这就是我们今天的节目。我们祝你有一个美好的一天,我们希望很快收到你的消息。再见。
