与Yoav Landman的CTO角,JFrog第1集:构建信息

想了解一下DevOps公司的首席技术官是什么样的吗?加入JFrog的CTO Yoav Landman,参加我们新的CTO角系列。每一集的主题都是每个技术专家最关心的,或者应该关心的。你将与其他行业领袖讨论科技领域的热门话题,让你有机会看到决策者的幕后。

左转现在被认为是发展的核心原则,而不是转移——安全是重要的。我们应该问自己的问题是,我们应该采用什么方法来保护我们的业务。对于Yoav,核心解决方案是在Build Info或soms中找到的。这种二进制元数据对于开发人员跟踪和跟踪代码中的漏洞是非常宝贵的。我们将深入探讨为什么这很重要,以及为什么现在大多数实现都是低保真的,但可以通过开源选项来修复。

与Yoav, Eyal Ben Moshe, JFrog生态系统开发经理和其他行业专家一起讨论保护代码的最佳实践。

更多的资源2022世界杯阿根廷预选赛赛程

转录:

考特尼金大家早上好,下午好,晚上好,我是Courtney gold,今天我将快速介绍一下我们的CTO系列专题。在我们开始之前,我想做一些家务提醒一下,这正在被记录,所以我们会把它发送出去。如果你有任何问题,请,请不要犹豫,在你下方的问答聊天框里问他们,但除此之外,我将由我们出色的演讲者开始,我们今天,非常感谢大家,感谢你们的加入。

莫兰德系:嗨。让我们自我介绍一下。大家好,很高兴来到这里,我叫Moran Ashkenazi,我是JFrog首席安全官兼安全工程副总裁。

Eyal Ben Moshe我是Eyal Ben Moshe,我在JFrog的研发部门负责系统工程。很高兴来到这里。

Yoav乡下人JFrog的首席技术官兼联合创始人Yoav Landman很高兴能和你们一起举办这次网络研讨会。

莫兰德系听起来不错,那么让我们从头开始,真正的从头开始。什么是构建信息什么时候开始的?

Yoav乡下人所以今天我们要谈论的是一项在我们的领域里几乎是古老的技术。Build Info实际上是一个非常非常酷的技术,但它早在2011年就开始了。我们从Java的实现开始,我们的想法是能够记录构建中的所有内容,包括模块创建的依赖关系、各种环境变量和属性等等。

最初的目标很简单,那就是为了节省开发人员,也就是运行构建的开发人员,这种手工查找所有依赖项和创建材料清单的苦工,他可以和我们一起去找法律。因为我们发现自己在这么做,而客户也在寻求解决方案。因此,我们为Java开发了这项技术,并在Java中实现。随着时间的推移,它经历了几个化身,我们用Go语言重新实现了它,扩展了支持的技术。我们将展示一些示例和演示如何将其集成到Artifactory中。

从本质上讲,我们有点开玩笑地称之为技术JFrog保守得最好的非秘密因为它一直是开放的,一直在开源许可下,我们今天正在使它更容易接近,就像我们稍后展示的那样。这是Build Info。

莫兰德系2011年,就像11年前一样,太神奇了。构建信息架构看起来像什么?我能从中得到什么信息?属性呢?它包含什么样的属性?

Yoav乡下人我稍微说了一下,让我分享一下我的屏幕。给你看GitHub页面。

我们可以看一下图式。基本上它假设一个构建,然后有构建属性,环境变量也会在这里,你可以过滤掉秘密,有构建的名称,数量,类型,实际的构建代理。

莫兰德系:我能看到依赖关系吗?

Yoav乡下人是的,当然可以。让我们跳过这一部分,这样您就可以看到版本控制系统。这才是真正有内涵的东西,你有所有的模块和关于它们的所有属性,以及所有用校验和和所有依赖创建的工件。我们将向您展示一些真实世界的例子。

作为依赖项的一部分,您还可以获得一个列表,说明依赖项是如何产生的,谁将其作为依赖项请求。传递依赖关系,您也可以构建实际的图。让我快速向下滚动。

这里你可以看到一些为围棋生成的真实例子,所有的围棋模块都是它们的和,所有的模块都创建了这个模块的依赖项。这是模块,这些是模块的依赖关系你可以看到它们是如何产生的。

莫兰德系实际上,这是软件物料清单。软件组件和依赖项的清单。我记得,大约一年前,美国政府发布了关于加强国家网络安全的行政命令。乔·拜登实际上提到,他希望美国政府在2021年建立一个行业标准,以保护其免受供应链攻击。就在三周前,Log4j触及了我们在世界各地的每一个开发人员。我的问题是,作为一名开发人员,为什么它对我很重要,这个SBOM给了我什么,我为什么要使用它?

Yoav乡下人当然,这是一个非常好的问题。

所以作为开发者,你希望能够知道你的构建中使用了什么材料。从本质上讲,那些进入你构建的材料,所有的第三方依赖关系以及你创建并组装成最终产品的每个包,你想知道它是如何产生的,你想知道构建时系统的状态是什么,你想要能够将其记录为接近现实。它必须与构建时的条件相匹配。我可以稍后再讲,但重建这些信息并不总是那么容易。

现在,当你有了这个人工产物,你可以把它想象成一个二元人工产物。这个与构建相关的SBOM有一个名称,一个版本,一个检查项,这就是我们如何管理它的,你在Artifactory中也知道。这是你可以签名的东西这是你可以用来证明出处的东西。如果你有多个构建构成你的最终产品,你可以把这些构建信息捆绑在一起,即使它们来自不同的技术,这给了你,作为一个开发人员或安全人员或者只是想要回到过去看看你的产品到底有什么,它给了你这个这个证明。它还能让你验证最终发行版中的内容,是否真的来自于那个版本。

莫兰德系所以责任,意识到依赖关系,甚至你知道从法律的角度了解你实际上拥有什么。

Yoav乡下人:对。这是一个非常非常基本的构建块,但是如果你组装它,如果你我的意思是在JFrog的产品中,我们在它上面增加了价值,但你不必把它作为任何JFrog技术的一部分使用它是一个开放的技术,你可以在这个起源证明中完全独立地构建它,只要把它附加到任何构建中。

莫兰德系是的,我们很快就会在DEMO中看到它。谢谢。与其他尝试从依赖项扫描中创建SBOM的工具相比,为什么构建信息如此独特?

Yoav乡下人是的,所以我们没有与任何特定的格式结合,我的意思是构建信息只是一种格式。当它开始的时候,它是非常独特的,我的意思是,我认为没有人捕捉到这种图表和这种关于建筑的信息。但是您也可以将构建信息导出为SPDX或CycloneDX和其他格式。它真正的独特之处在于,它试图捕获这些信息作为构建的一部分。这取决于技术,但是如果你想一下,当你去到任何你能想到的法案时,你可以只拿依赖声明,一个日志文件或一个POM xml或一个go模式,你可以从那个文件中重建关于构建的信息。实际上不可能保证声明性文件和投标的实际结果之间是一对一的映射。为什么?因为存在依赖性,所以法案中总是存在动态性。这种动态可以是版本范围,也可以是影响构建运行方式的环境变量或系统属性。它甚至可以访问生产环境中CI环境和开发人员环境之间可能不同的远程存储库。 And it can be even the tool that changed some logic, some algorithm in the conflict resolution for dependencies.

所以这是现实世界中正在发生的问题的一部分,这是动态的一部分。因此,你不能只看原处,然后在时间上重建同一张钞票。同样,如果你试图重复它,如果你有不同的检查臂,可能不同的依赖日期注入到你的账单中。所以,准确地捕捉所有这些信息是非常重要的。

莫兰德系哇,太神奇了!Eyal,目前支持哪些技术?

Eyal Ben Moshe是的,所以我们尽量支持每一种流行的技术。现在我们支持npm、Maven、Gradle、Docker、nuget、。net core、peep,并且我们还在不断扩展对其他包管理器的支持。

莫兰德系你是如何跟上新技术的?

Eyal Ben Moshe是的,所以实际上每一项流行的技术都在被优先考虑,我们正在为它添加构建信息支持。您知道,我们正在将技术集成到包管理器中,并且正如Yoav提到的,我们实际上正在捕获构建过程中发生的所有事情。为了做到这一点,我们与这些包管理器紧密地集成在一起,我们需要确切地知道并记录它们在做什么,它们在下载什么,以及周围发生的一切。

所以,我们的目标是最终支持一切。

莫兰德系:它和我们在一起已经11年了,真是太神奇了。我的问题是什么改变了,为什么它又出现了,它一直都是OSS,那么有什么新闻,接下来会发生什么?

Yoav乡下人首先它是在11年前开始的,这是很久以前的事了,但它经历了很多版本,直到它达到了这个成熟的水平。它是经过战斗验证的,JFrog内部和许多JFrog客户都在使用它,以一种完全透明的方式获取所有构建的记录。

总的来说,我们还有JFrog CLI,它使用Build Info,它就像JFrog的瑞士军刀,可以与CI服务器集成,也可以与我们所有产品的REST API集成。hth华体会最新官方网站这次我们所做的是我们决定让技术本身——构建信息的提取——更容易接近,贡献更明显。

所以我们所做的就是把所有可提取的东西,从JFrog CLI中取出来,作为一个完全独立的Go项目。我们开始移动我们在这个过程的中间我们开始移动所有技术的所有提取器到单独的go模块中,你可以通过直接调用它们来使用一个最小的工具,我们马上会展示,CLI也在使用,都是通过一个API。

所以这是一个很大的变化,让这些提取器可供任何人使用,可以从任何类型的构建和任何技术中导出这种格式。

莫兰德系对社区的惊人支持。我们讲了CLI,我想我准备好了,让我们看一下DEMO。

Eyal Ben Moshe当然,所以让我分享我的屏幕,给你展示一个演示。是的,我相信你们现在可以看到我的屏幕,所以让我们。开始,你们现在看到的是我们创建的新网站,它描述了构建信息并触及了它周围的要点。

这是构建信息存储库。这就是我们提取的地方,正如Yoav提到的实际提取器逻辑,所以你可以直接去下载CLI, CLI二进制文件,一会儿我们就会看到它是如何被使用的。

如果你愿意,你也可以把它当作图书馆。这是用Go写的。这里我们给你放了你可以集成的实际API创建Build Info并使用它。

让我来告诉你怎么做。所以在这里,我已经下载了构建信息命令行。在这里,我将向你们展示如何使用它。

例如,这是一个Maven项目。这实际上是Jenkins Artifactory插件项目,我要做的是我要为它创建一个Build Info我要运行bi和mvn。

实际上现在正在发生的是有一个构建在运行所以有一个真正的构建因为我们说过的构建信息记录了在构建期间发生的一切然后构建完成然后我们可以在这里看到已经创建的真正的构建信息。

你可以看到我现在在里面,在文件的末尾,你看不到那个部分,但我告诉你这是依赖部分,你可以在这里看到,例如,依赖的概念。你可以看到,类型和范围当然,我们还可以看到这个构建是如何下载这些依赖项的因为它是由这两个依赖项请求的。

为了让你感觉用这个工具创建构建信息有多容易,我可以对Go做同样的事情,这是我们用Go写的JFrog CLI,我可以运行类似的bi,然后继续,然后它会构建我的代码,在这里。

是的,它很快,因为你知道,大多数依赖都已经兑现了。

这里你可以看到它是完全相同的格式,在这种情况下的想法是这些是Go依赖项和我们添加的其他东西,这很好。我们实际上是支持出口或将构建信息转换成CycloneDX SBOM格式,所以我可以添加- -格式,我可以选择xml或json这里你看到,你有它,相同的数据和SBOM格式,你看到的依赖关系,如果我们我们会看到其他数据,其他组件和我能做的,当然,同样的json格式的CycloneDX你去。

这是Build Info,这实际上是生成Build Info的代码的本质或核心。

我们也在自己的产品中使用Build Info。hth华体会最新官方网站正如Yoav提到的,构建信息开始是我们需要的东西,Artifactory和我们的其他一些产品也在使用构建x射线。hth华体会最新官方网站

让你们了解一下我们在做什么,或者我们的产品是如何使用Build Info的,这是Artifactory。hth华体会最新官方网站

莫兰德系:当你登录到JFrog平台并移动到Artifactory时,你会看到它在UI中的样子

Eyal Ben Moshe是的,当然,我刚登录,然后在Artifactory下面,你有你的构建部分。这些是我们发布到这个或JFrog平台的Artifactory实例的所有构建在这里,为了这个演示,我只创建了一个示例构建,如你所见,有几个构建运行,我在这个构建上运行了三个构建运行如果我进入其中一个构建运行,这里,你可以看到。

莫兰德系相同的格式。

Eyal Ben Moshe是的,这是Build Info json,正如你在这里看到的所有环境变量实际上都被记录了,如果你向下滚动,你会看到这里的依赖,工件,如果这将发布工件和其他一切,然后你知道我们创建了一个UI,它是基于这些信息的,所以这里你可以看到实际发布的模块。如果我进入这个特定项目,它只有一个模块,我可以查看构建的所有依赖项以及json中的所有内容。作为构建的一部分记录的环境变量。

莫兰德系我不能忽视的事实是,你的模块也有漏洞,你能跳到x射线数据吗?让我们来看看。

Eyal Ben Moshe让我们开始吧,所以我确保这个构建包含真正的安全漏洞,正如您在这里看到的,这个构建中有四个安全漏洞。

莫兰德系埃亚尔,你的这个建筑有大麻烦了。

Eyal Ben Moshe两个严重的漏洞,一个严重的漏洞,我可以深入挖掘,看到更多可视化的数据。我的观点是,你必须建立信息,现在你可以决定如何处理它,所以我们有了账单的记录,现在扫描变得容易了。

是的,这是真实的数据,我们都支持向左移动,这就是我们所做的,我们的开发人员在他们的IDE中运行JFrog IDE集成,以确保您知道尽快发现漏洞。但是,正如Yoav所提到的,并不能真正保证开发人员实际运行的是最终由CI构建并发布到世界上的东西。

Yoav乡下人对此有一点评论,好处是你有信息,你捕获的信息,这是一个永远不会改变的不可变的信息。在这种情况下,它被冷冻了,周围有一些产品,但你可以把它冷冻在s3桶里,如果你愿意,或者你可以签名。hth华体会最新官方网站你可以扫描它,因为它是一个记录你构建过程中发生的一切的系统,现在你可以扫描它,这是JFrog x射线扫描但理论上,你可以用任何工具扫描它,因为你只需要解析包名或sha,在此基础上,你可以做一个静态组件分析扫描并公平对待构建过程的安全状况。

莫兰德系非常重要。你提到了签名,所以构建的真实性如何?

Yoav乡下人我想埃亚尔想让你看看。

Eyal Ben Moshe是的,你是对的,你想要确保这个材料清单这个Build Info实际上是签名的,因为你想要做的基本上是你想要把它附加到你的软件上,把它附加到你的软件上,附加到你的代码上,这样任何人都能看到它包含的内容,你想要它被签名,所以我可以给你看我们做了什么。

我要用到余弦这个工具,它是。

Yoav乡下人开放ss的一部分,是的,它是6到16个项目中的一部分,是的,我认为它最初是一个用于签名容器的工具,但更普遍的是任何blob。

Eyal Ben Moshe是的,完全正确,所以它是用来签署容器的,但是我们会告诉你你如何知道什么时候你可以真正签署Build Info,所以我在这里创建了一些东西。

这里是json的building这是Jason的building我们会展示如何创建。这里我创建了一个可以签名的脚本我要运行这个cosign命令design blog命令,你可以看到,这里是最后一个参数它会为json签署这个建筑签名签名之后,人们就能确认它被签名了,我来运行一下。

Yoav乡下人需要注意的是,如果你使用的是实验性标志,所以并不是所有的东西都完全融入了余弦,但这是为了演示,它是有效的。

Eyal Ben Moshe是的,它对我们有效,为了演示,所以让我们运行这个,现在将要发生的是。

我的浏览器将打开,工具将要求我进行身份验证所以让我用我的谷歌帐户进行身份验证。我将使用我的JFrog谷歌帐户进行身份验证,现在身份验证完成后,我基本上可以关闭浏览器了。在这里,你可以看到工具为我创建了一个证书。对于签名,我也收到了一个ID,这是注册中心正在使用的辅助签名或正在使用的实际注册中心的记录的透明度日志ID。现在我有了这些信息,我将使用这个ID,让我打开脚本。我把ID写在这里。然后我将继续运行这两个命令。这些命令,如你所见,这是我们用于签名的记录代码。这两个命令会为我们创建一个签名文件和一个公共证书。让我们运行这三个命令。

就这样,我们做完了。这些文件实际上是创建的,现在我能做的是,你知道任何人实际上都可以验证这个构建信息,所以想象一下,现在你收到了这个构建信息,你发现附加到项目中,现在你想验证真实性的真实性。

您只需运行整个脚本。是的,你看到第一行说它是经过验证的,这个错误,我认为这是因为我们正在使用这个功能的实验版本。但它被验证了,因为如果我现在去,让我篡改我的Build Info json。打开它,这是我们签署的Build Info json,让我添加一个数字,比如1这基本上改变了这个Build Info然后我将再次运行验证,你看到我没有得到这个验证。所以。是的。

Yoav乡下人如果我们从根本上看这个场景,如果你正在构建一个开源项目,你可以记录构建信息。说你建立一些Java或node . js包作为开发人员,您可以验证构建信息构建包,您可以使用你的公开身份识别自己喜欢你的GitHub或谷歌身份,然后你可以用这个身份签署你的开源包和它的透明度日志不仅验证方案,您已经创建了它也是一切如何建立这个包,回到的依赖关系是什么时间,你是在什么样的环境下建造的等等。

很好,很好。

莫兰德系谢谢你,Eyal,很棒的演示。让我们从大楼的角度来看一个路线图,你是怎么看的?

Eyal Ben Moshe是的,正如我们之前提到的,我们的目标是支持更多的技术和更多的包管理器。

因为格式是相同的,所以它基本上只是与技术集成,确保我们正确提取数据,正确构建,然后,当然,任何人都可以在标准之上创建自己的应用程序。

你知道,一旦工具处理了实际记录数据的繁重工作,那么你就知道这取决于你认识的任何人。

莫兰德系作为一名开发人员,如果我想为这个项目做出贡献,我该怎么做?

当然欢迎你来贡献。所以Build Info go是一个开源项目。这是我们最近刚开始的一个新项目。我们不断地向它添加代码并改进它,所以任何想加入我们并做出贡献的人都被邀请创建拉取请求并与我们合作,这不仅适用于这个项目,我的意思是基本上所有项目。

你知道我们所有的生态系统集成,如果是ID插件,重新创建CI集成,JFrog CLI,我们的SDK,你知道它们都是开放的,我们看到很多合作,我们鼓励它,我们喜欢它,所以你绝对被邀请。

Yoav乡下人我想我们现在已经创建了一个新的仓库,但为了原来的建筑,为了60多个不同的合作者,他们多年来对它进行了改进,所以。

Eyal Ben Moshe是的,绝对是现在。

莫兰德系开放式问题,不好意思,请继续。

Eyal Ben Moshe既然提取的实际逻辑是分离的,那么贡献它就更容易了。实际上,它现在已经与实现的用例解耦了,所以它更容易了,你现在可以贡献给提取部分,当然,也可以贡献给实际使用它的部分或库。例如,JFrog CLI现在使用Build Info go作为依赖项。所以,你知道,现在很容易看到你知道,看到他们大部分,分开,你知道,对我们来说。

你知道,继续贡献和发展它。

莫兰德系很好,我想我们已经准备好回答问题了,考特尼,你在听吗?

考特尼金是的,我和你在一起,我不想打断你们正在进行的谈话。所以我们做了一些问题,作为对其他人的提醒,请不要犹豫,把你的问题写在那里,我们在这里回答他们,但我们的第一个问题是我们都知道,Build Info如何帮助我们解决Log4j Log4shell零日漏洞,这是最近的一个热门话题。

莫兰德系:当然。

Yoav乡下人是的,所以我对这个问题并不感到惊讶,我的意思是,这是现在必须要问的问题。

首先,它不会帮助您避免使用Log4shell,但它将帮助您的是,首先,由于信息被压缩并以一种非常容易解析的格式呈现,因此您可以非常容易地扫描和识别构建中的位置,因为您正在扫描完整的构建,因此如果您扫描构建信息,您将能够识别使用Log4j的位置。您将能够通过识别Log4j的传递或直接依赖关系来做到这一点。

还有一些我们发现有一些库嵌入了Build Info我们会在接下来的几天里,发布一个关于这个的博客,如果你知道那些库,你也可以很容易地识别它们。

将Build Info的使用与来自CI的实际构建任务联系起来,然后将它们与项目联系起来,并在项目中修复它们,也更容易。而不是试图说好的,我现在有了这个blob,它包含一个Log4j文件,它是如何产生的,谁构建了它,什么时候构建了这个类。因此,它为您提供了更多的清晰度,而不是追溯到使用错误版本Log4j的来源。基本上就是这样。

莫兰德系非常重要。

考特尼金好的,下一个问题是JFrog如何用新技术支持社区?

Yoav乡下人好吧,我想我会讲的。

Eyal Ben Moshe是的,我想我几乎涵盖了社区贡献。我们所有的生态系统项目都是开源的,你知道,这就是我们管理它们的方式,邀请合作,与他人合作,这对我们来说真的很重要。

我认为我们今天维护着大约15个开源项目,其中一些非常受欢迎。我认为JFrog CLI是最顶尖的。

这些工具每天都有成千上万的下载量,然后我们得到了开发者的合作。几年前,我们从JFrog CLI中提取了一个库JFrog客户端go,这个库允许你,基本上是JFrog API的包装器,并允许在JFrog产品上轻松开发,这只是我们加倍关注安全性的ID集成的两个例子,但不仅仅是安全性。

莫兰德系好的,是的。

Eyal Ben Moshe是的,我刚才说,你知道我们的IDE集成也是一个例子,我们正在加倍努力确保开发人员拥有最好的。

Yoav乡下人好吧,我不确定你能听到我们说话。我会很快补充一点,首先,这些都是伟大的项目,我们要确保的是我们支持开放格式,我们要确保我们创建的格式与其他格式是可互换的。正如我之前提到的,我们正在做的项目是与任何特定的产品分离的。您可以使用它,我们希望促进这种采用,以提高安全性级别和作为构建的一部分使用的内容的可见性。我们还有其他CI服务器和构建技术,采用build Info并与之集成。

JFrog是openSSF的一部分,我们正在与其他合作伙伴密切合作,围绕软件供应链和物料清单制定标准。我们很高兴看到它现在得到了很大的关注。我们之前会有一个非常强大的组成部分,但现在市场开始理解它,可能是出于错误的原因,因为风险变得太直接了,太容易让人们匿名造成伤害。但它促进了更好的代码卫生和依赖卫生,所以我们很高兴能成为其中的一部分。

莫兰德系开发人员和安全人员走到一起,这是非常重要的,感谢我们的聚会。

考特尼金是的,我们还有一些问题要问。

我现在要问的是,考虑到构建过程构建工具中可能存在变化,构建信息工具和通过捕获构建级过程来创建准确的SBOM的可扩展性如何,等等,这是一个很长的问题。

Eyal Ben Moshe如果你现在能清楚地听到我说话,那么我就可以买了。

Yoav乡下人是的,我们能听到。

Eyal Ben Moshe哦,很好,我想问题是Build Info如何处理你知道,不同的包管理器是不同的。

考特尼金我再重复一遍这个问题。考虑到该过程中可能存在变化,构建信息工具和通过捕获构建级过程创建准确的SBOM的可伸缩性如何?

Eyal Ben Moshe是的,所以答案是这个构建信息的目的是尽可能准确,因为,正如我们之前提到的,它是作为构建的一部分运行的,所以基本上想象一下,生成构建信息的实际逻辑是与构建一起运行的,目标是构建是为了什么它只是记录它就像一个记录器它记录发生的一切。

想象一下,现在你正在运行两个构建,一个接一个,在第二个构建中有些东西不同,比如不同的环境变量,不同的存储库,这实际上并不重要。

如果第二个账单下载了一个稍微不同的依赖版本,它将被记录下来。

这不同于另一种方法,让我们看看源代码,试着弄清楚它会构建什么。我们对Build Info做的是,我们只是在运行时记录。这就是我们得到精度的方法。

Yoav乡下人是的,这是一份准确的报告,它会告诉你建筑中发生的一切。所以这是非常值得信赖的。它捕获了构建中发生的所有事情。如果你想重建构建,我们JFrog反对尝试重建构建。如果您想要证明某个包对其源的真实性,那么您可以从多个源运行构建,并看到您得到相同的结果。

但是,从理论上讲,您没有理由从头开始重新构建二进制文件。一旦你有了二进制一旦你存储了它一旦他们有了二进制的来源,你就不应该浪费时间和精力去重建它而且以后重建它是非常困难的。但对于这个问题,它是超级可靠的,因为它包含了原始构建中发生的一切。

考特尼金很好,很好,下一个问题是我们支持哪些CI服务器,支持新的“见我”工作流有多容易?

Eyal Ben Moshe是的,所以我可以回答这个问题,那么快速的答案是什么,支持我们将支持任何CI服务器的一切,这是这样做的。

我们有流行的CI服务器的CI集成Jenkins, GitHub, Azure和所有流行的CI服务器都支持他们的专用集成。例如,对于GitHub,我们有一个JFrog CLI GitHub动作,它实际上使用JFrog CLI来创建集成,所以它会为你生成构建信息。我们有一个非常流行的Jenkins Artifactory插件,它可以完成所有这些。我可以说,我们支持任何CI服务器,因为你可以在那里嵌入JFrog CLI,它包含了一些旨在轻松集成CI服务器api的特性。

是的,为任何CI生成Build Info是非常容易的。

考特尼金很好,这是最后一个问题,但我想快速感谢大家今天的参与。这是一次很棒的谈话。莫兰,我让你继续并结束它,但是感谢所有与会者的加入,我们感谢你的时间,我们期待在不久的将来看到你更多。

莫兰德系是的,当然可以。谢谢你Courtney,谢谢你和JFrog的联合创始人兼首席技术官Yoav Landman一起参加CTO角系列的第一集。感谢我们的小组成员Eyal Ben Moshe,他是JFrog生态系统的负责人。我是JFrog首席信息安全官Moran Ashkenazi。我们期待下一集见到大家,请继续关注,谢谢大家。

Yoav乡下人:谢谢。

Eyal Ben Moshe很高兴见到你,再见。

要么释放,要么死亡