云客户?
免费开始>
在MyJFrog中升级>
云的新功能>







概述

管道作业通过创建定义构建步骤的脚本,简化了Jenkins构建持续交付工作流的过程。对于那些不熟悉Jenkins管道的人,请参考管道教程或者是管道入门文档。

Jenkins Artifactory插件支持人工操作管道api。您还可以通过管道脚本下载依赖项、上传工件以及向Artifactory发布构建信息。

本页描述了如何在Artifactory中使用声明性管道语法。声明式语法在Jenkins Artifactory Plugin的3.0.0版本中可用。


还支持脚本语法。点击这里了解更多

例子

Jenkins Pipeline示例可以帮助您开始使用Artifactory创建流水线作业。


页面内容


创建人工服务器实例

有两种方法可以告诉管道脚本要使用哪个Artifactory服务器。可以将服务器详细信息定义为管道脚本的一部分,也可以将服务器详细信息定义为管理|配置系统

如果您选择在管道中定义Artifactory服务器,请向脚本添加以下内容:

rtServer (id: 'Artifactory-1', url: 'http://my-artifactory-domain/artifactory', //如果你正在使用用户名和密码:用户名:'user',密码:'password', //如果你正在使用凭据id: credentialsId: ' ccrecreeddeennttiiaall ', //如果Jenkins被配置为使用http代理,你可以绕过代理时使用这个Artifactory服务器:bypassProxy: true, //配置连接超时(以秒为单位)。//默认值(如果未配置)为300秒:timeout: 300)


你也可以使用Jenkins Credential ID代替用户名和密码:

id属性(Artifactory-1在上面的示例中)是此服务器的唯一标识符,允许我们稍后在脚本中引用此服务器。如果您喜欢将服务器定义为管理|配置系统,你不需要加rtServerit定义如上所示。您可以使用其配置的引用服务器服务器ID


上传和下载文件

要下载这些文件,请在管道脚本中添加以下闭包:

rtDownload (serverId: 'Artifactory-1', spec: " '{"files": [{"pattern": "bazinga-repo/frog -files/", "target": "bazinga/"}]} " ', //可选-将下载的文件与以下自定义构建名称和构建编号相关联,//作为构建依赖项。//如果没有设置,文件将与默认的构建名称和构建号(即// Jenkins作业名称和编号)相关联。buildName: 'holyFrog', buildNumber: '42', //可选-仅当此构建与Artifactory中的项目相关联时,设置项目密钥如下。项目:'my-project-key')

在上面的示例中,文件是从Artifactory服务器下载的Artifactory-1服务器ID。

上面的闭包还包括一个文件规范,它指定应该下载哪些文件。在本例中,目录中的所有ZIP文件bazinga-repo froggy-files /人工路径应该下载到bazinga目录。

上传文件非常相似。下面的示例上传所有ZIP文件,其中包括不好的在他们的名字进入froggy-files文件夹中的bazinga-repoArtifactory库。

rtUpload (serverId: 'Artifactory-1', spec: " '{"files": [{"pattern": "bazinga/*froggy*.zip", "target": "bazinga-repo/froggy-files/"}]} " ', //可选-将上传的文件与以下自定义构建名称和构建编号关联,//作为构建工件。//如果没有设置,文件将与默认的构建名称和构建号(即// Jenkins作业名称和编号)相关联。buildName: 'holyFrog', buildNumber: '42', //可选-仅当此构建与Artifactory中的项目相关联时,设置项目密钥如下。项目:'my-project-key')

可以在单独的文件中管理文件规范,而不是将其添加到rtUploadrtDownload闭包。这允许在源代码控制中管理文件规范,也可以使用项目源代码。下面是访问文件规范的方法rtUpload的配置类似rtDownload关闭

rtUpload (serverId: 'Artifactory-1', specPath: 'path/to/spec/relative/to/workspace/spec. ')//可选-将上传的文件与以下自定义构建名称和构建号关联。//如果没有设置,文件将与默认的构建名称和构建号(即// Jenkins作业名称和编号)相关联。buildName: 'holyFrog', buildNumber: '42', //可选-仅当此构建与Artifactory中的项目相关联时,设置项目密钥如下。项目:'my-project-key')

您可以阅读有关使用文件规格下载和上传文件在这里

如果您希望在没有上传或下载文件的情况下使构建失败,请将failNoOp属性添加到rtUploadrtDownload闭包如下:

rtUpload (serverId: 'Artifactory-1', specPath: 'path/to/spec/relative/to/workspace/spec. ')failNoOp: true, //可选-将上传的文件与以下自定义构建名称和构建号关联。//如果没有设置,文件将与默认的构建名称和构建号(即// Jenkins作业名称和编号)相关联。buildName: 'holyFrog', buildNumber: '42', //可选-仅当此构建与Artifactory中的项目相关联时,设置项目密钥如下。项目:'my-project-key')

在Artifactory中设置和删除文件属性

当使用rtUpload闭包将文件上传到Artifactory时,您可以选择设置文件的属性。稍后可以使用这些属性来过滤和下载这些文件。

在某些情况下,您可能希望在Artifactory中已经存在的文件上设置属性。此方法与定义要下载或上传哪些文件的方法非常相似:使用FileSpec筛选应该在其上设置属性的过滤器。要设置的属性发送到文件规范之外。下面是一个例子。

rtSetProps (serverId: 'Artifactory-1', specPath: 'path/to/spec/relative/to/workspace/spec. ')json', props: 'p1=v1;p2=v2', failNoOp: true)

在上面的例子中:

  1. serverId属性用于引用预配置的Artifactory服务器实例,如创建Artifactory服务器实例部分中所述。
  2. specPath属性包括指向文件规范的路径,该文件规范具有与用于下载文件的文件规范相似的结构。
  3. 道具属性定义了我们想要设置的属性。在上面的例子中,我们分别用v1和v2值设置了两个属性——p1和p2。
  4. failNoOp属性是可选的。如果没有设置任何属性,将其设置为true将导致作业失败。

您还可以在rtSetProps闭包中直接指定File Spec,如下所示。

rtSetProps (serverId: 'Artifactory-1', props: 'p1=v1;p2=v2', spec: ''{"files": [{"pattern": "my-froggy-local-repo", "props": "filter-by-this-prop=yes"}]}')

rtDeleteProps闭包用于从Artifactory中的文件中删除属性,其语法与rtSetProps闭包非常相似。唯一的区别是,在rtDeleteProps中,我们只指定要删除的属性的名称。名称以逗号分隔。不应该指定属性值。这里有一个例子:

rtDeleteProps (serverId: 'Artifactory-1', specPath: 'path/to/spec/relative/to/workspace/spec. ')json', props: 'p1,p2,p3', failNoOp: true)

与rtSetProps闭包类似,File Spec可以隐式地定义在闭包内部,如下所示:

rtDeleteProps (serverId: 'Artifactory-1', props: 'p1,p2,p3', spec: ''{"files": [{"pattern": "my-frog -local-repo", "props": "filter-by-this-prop=yes"}]}')



将构建信息发布到Artifactory

如果您还不熟悉build-info实体,请阅读相关内容在这里

下载的文件rtDownload闭包将自动注册为当前构建的依赖项,而由rtUpload闭包被注册为构建工件。依赖项和工件在本地记录,以后可以作为构建信息发布到Artifactory。

下面是你发布build-info到Artifactory的方法:

rtPublishBuildInfo (serverId: 'Artifactory-1', //下面的buildName和buildNumber是可选的。如果不设置,则使用Jenkins作业名称//作为构建名称。构建号也是如此。//如果您选择通过添加以下buildName和// buildNumber属性来设置自定义构建名称和构建编号,您应该确保之前的构建步骤(例如rtDownload //和rtIpload)具有相同的buildName和buildNumber设置。如果没有,那么这些步骤将不会//包含在build-info中。buildName: 'holyFrog', buildNumber: '42', //可选-仅当此构建与Artifactory中的项目相关联时,设置项目密钥如下。项目:'my-project-key')


如果您如上所示设置了自定义构建名称和编号,请确保在rtUploadrtDownload闭包如下所示。如果不这样做,Artifactory将无法将这些文件与构建相关联,因此它们的文件将不会显示在Artifactory中。

rtDownload (serverId: 'Artifactory-1', // Build -info的Build名称和Build编号:buildName: 'holyFrog', buildNumber: '42', //可选-仅当此构建与Artifactory中的项目相关联时,设置项目密钥如下。你也可以选择自定义build-info模块名:module: 'my-custom-build-info-module-name', specPath: 'path/to/spec/relative/to/workspace/spec. 'json”)rtUpload( serverId: 'Artifactory-1', // Build name and build number for the build-info: buildName: 'holyFrog', buildNumber: '42', // Optional - Only if this build is associated with a project in Artifactory, set the project key as follows. project: 'my-project-key', // You also have the option of customising the build-info module name: module: 'my-custom-build-info-module-name', specPath: 'path/to/spec/relative/to/workspace/spec.json' )

捕获环境变量

要将Build-Info对象设置为在下载和上传文件时自动捕获环境变量,请在脚本中添加以下内容。

放置是很重要的rtBuildInfo在与此构建相关的任何步骤(例如,rtDownload和rtUpload)之前关闭,以便将其配置的功能(例如,环境变量收集)作为这些步骤的一部分调用。

rtBuildInfo (captureEnv: true, //可选-构建名称和构建编号。如果未设置,则使用Jenkins作业的构建名称和构建号。buildName: 'my-build', buildNumber: '20', //可选-仅当此构建与Artifactory中的项目相关联时,设置项目键如下。项目:'my-project-key')

默认情况下,包含“password”、“psw”、“secret”、“token”或“key”(不区分大小写)的环境变量名称将被排除在外,并且不会发布到Artifactory。

你可以用通配符添加更多的include/exclude模式,如下所示:

rtBuildInfo (captureEnv: true, includeEnvPatterns: ['*abc*', '*bcd*'], excludeEnvPatterns: ['*private*', 'internal-*'], //可选-构建名称和构建号。如果未设置,则使用Jenkins作业的构建名称和构建号。buildName: 'my-build', buildNumber: '20' //可选-仅当此构建与Artifactory中的项目相关联时,设置项目键如下。项目:'my-project-key')


触发构建保留

将构建信息发布到Artifactory时,可以触发构建保留rtPublishBuildInfo关闭。设置构建保留,因此应该在发布构建之前使用rtBuildInfo闭包,如下所示。请确保在脚本中放置以下配置rtPublishBuildInfo关闭。

rtBuildInfo(//可选-在Artifactory中保留的最大构建。maxBuilds: 1, //可选-在Artifactory中保留构建的最大天数。maxDays: 2, //可选-在Artifactory中保留的构建号列表。doNotDiscardBuilds:['3'], //可选(默认为false) -在删除构建时也删除构建工件。deletebuilartifacts: true, //可选-构建名称和构建号。如果未设置,则使用Jenkins作业的构建名称和构建号。buildName: 'my-build', buildNumber: '20', //可选-仅当此构建与Artifactory中的项目相关联时,设置项目键如下。项目:'my-project-key')



收集构建问题

构建信息可以包括作为构建的一部分处理的问题。问题列表是由Jenkins从git提交消息中自动收集的。这要求项目开发人员使用一致的提交消息格式,其中包括问题ID和问题摘要,例如:
HAP-1364 -将制表符替换为空格
然后可以在Artifactory的构建UI中查看问题列表,并在问题跟踪系统中提供到问题的链接。
收集问题所需的信息通过JSON配置提供。该配置可以作为文件或JSON字符串提供。
下面是一个问题收集配置的示例。

{“版本”:1、“问题”:{“trackerName”:“JIRA”,“正则表达式”:“(. + - [0 - 9]+)\ \ s - \ \ s(+)”,“keyGroupIndex”:1、“summaryGroupIndex”:2,“trackerUrl”:“http://my-jira.com/issues”,“总”:“真正的”,“aggregationStatus”:“发布”}}

配置文件属性:

属性名 描述
版本 模式版本仅供内部使用。不要改变!
trackerName 问题跟踪系统的名称(类型)。例如,JIRA。这个属性可以取任何值。
trackerUrl 问题跟踪URL。此值用于构造到Artifactory构建UI中的问题的直接链接。
keyGroupIndex

用于检索问题键的正则表达式中的捕获组索引。在上面的示例中,将索引设置为“1”检索hap - 1364从这个提交消息:

HAP-1364 -将制表符替换为空格

summaryGroupIndex

正则表达式中用于检索问题摘要的捕获组索引。在上面的示例中,将索引设置为“2”检索这个提交消息的示例问题:

HAP-1364 -将制表符替换为空格

如果希望所有构建都包含以前构建中的问题,则设置为true。

aggregationStatus

如果aggregate设置为true,则此属性指示聚合问题的时间间隔。在上面的例子中,问题将从以前的构建中聚集起来,直到找到具有RELEASE状态的构建。控件提升构建时设置构建状态Jfrog rt build-promote命令。
正则表达式

用于匹配git提交消息的正则表达式。表达式应该包括两个捕获组—问题键(ID)和问题摘要。在上面的示例中,正则表达式匹配的提交消息如下所示:

HAP-1364 -将制表符替换为空格

下面是如何在管道脚本中设置问题收集。

rtcollectissue (serverId: 'Artifactory-1', config: " '{"version": 1, "issues": {"trackerName": "JIRA", "regexp": "(.+-[0-9]+)\\s-\\s(.+)", "keyGroupIndex": 1, "summaryGroupIndex": 2, "trackerUrl": "http://my-jira.com/issues", "aggregate": "true", "aggregationStatus": "RELEASED"}} ",)

在上面的例子中,issues配置被嵌入到rtcollectissue闭包中。您还可以选择提供包含问题配置的文件。你应该这样做:

rtcollectissue (serverId: 'Artifactory-1', configPath: '/path/to/config. conf ')json”)

如果您想将问题信息添加到特定的构建信息中,您还可以提供构建名称和构建编号,如下所示:

rtcollectissue (serverId: 'Artifactory-1', configPath: '/path/to/config' buildName: 'my-build', buildNumber: '20', //可选-仅当此构建与Artifactory中的项目相关联时,设置项目密钥如下。项目:'my-project-key')

为了帮助您开始,我们建议使用Github的例子



聚合构建

发布到Artifactory的构建信息可以包含表示不同构建步骤的多个模块。正如本节前面所示,您只需要将相同的buildName和buildNumber传递给所有需要它的步骤(rtUpload例如)。

但是,如果构建过程在多台机器上运行,或者分布在不同的时间段,会发生什么情况?如何将所有构建步骤聚合到一个构建信息中?

当构建过程在多台机器上运行或分布在不同的时间段时,您可以选择为构建过程的每个部分创建和发布单独的构建信息,然后将所有已发布的构建信息聚合到一个构建信息中。最终的结果是一个build-info引用了其他先前发布的build-info。

在下面的例子中,我们的管道脚本向Artifactory发布了两个build-info实例:

rtPublishBuildInfo (serverId: 'Artifactory-1', buildName: 'my-app-linux', buildNumber: '1') rtPublishBuildInfo (serverId: 'Artifactory-1', buildName: 'my-app-windows', buildNumber: '1')

此时,我们在Artifactory中存储了两个构建信息。现在让我们创建最终的build-info,它引用了前两个:

rtBuildAppend(//必选:serverId: 'Artifactory-1', appendBuildName: 'my-app-linux', appendBuildNumber: '1', //下面的buildName和buildNumber是可选的。如果不设置,则使用Jenkins作业名称//作为构建名称。构建号也是如此。//如果您选择通过添加以下buildName和// buildNumber属性来设置自定义构建名称和构建编号,您应该确保之前的构建步骤(例如rtDownload //和rtIpload)具有相同的buildName和buildNumber设置。如果没有,那么这些步骤将不会//包含在build-info中。buildName: 'final', buildNumber: '1') rtBuildAppend(//必选:serverId: 'Artifactory-1', appendBuildName: 'my-app-windows', appendBuildNumber: '1', buildName: 'final', buildNumber: '1') //将聚合的构建信息发布到ArtifactoryrtPublishBuildInfo (serverId: 'Artifactory-1', buildName: 'final', buildNumber: '1')

如果Artifactory中发布的构建与项目相关联,则应该将项目密钥添加到rtBuildAppendrtPublishBuildInfo步骤如下。

rtBuildAppend(//必选:serverId: 'Artifactory-1', appendBuildName: 'my-app-linux', appendBuildNumber: '1', buildName: 'final', buildNumber: '1', project: 'my-project-key') rtBuildAppend(//必选:serverId: 'Artifactory-1', appendBuildName: 'my-app-windows', appendBuildNumber: '1', buildName: 'final', buildNumber: '1', project: 'my-project-key') //将聚合的构建信息发布到Artifactory。rtPublishBuildInfo (serverId: 'Artifactory-1', buildName: 'final', buildNumber: '1', project: 'my-project-key')

构建提升和x射线构建扫描目前不支持聚合构建。

在Artifactory中促进构建

要在Artifactory中提升存储库之间的构建,请在rtPromote例如:

rtPromote(//必选参数buildName: 'MK', buildNumber: '48', //可选-仅当此构建与Artifactory中的项目相关联时,设置项目键如下。project: 'my-project-key', //来自Jenkins配置的Artifactory服务器ID,或者来自管道脚本中的配置serverId: 'Artifactory-1', // Artifactory目标存储库的名称targetRepo: 'lib -release-local', //可选参数//评论和状态将显示在Artifactory的Build History选项卡中评论:'这是推广评论',状态:'已发布',//指定构建工件的源存储库。sourceRepo: 'lib -snapshot-local', //指示除了构件之外是否提升构建依赖项。默认为False。includeDependencies: true, //当移动或复制文件失败时,是否使升级进程失败。默认为False failFast: true, //是否复制。Move是默认值。副本:true)



允许发布版本的交互式推广

在Artifactory中促进构建部分描述了您的Pipeline脚本如何在Artifactory中促进构建。然而,在某些情况下,您希望在构建完成后执行构建提升。您可以配置Pipeline作业,将其发布到Artifactory的部分或全部构建公开,以便以后可以使用GUI交互式地提升它们。以下是互动推广的内容:


当构建完成时,可以通过单击构建运行旁边的升级图标来访问升级窗口。要为已发布的构建启用交互式推广,请添加rtAddInteractivePromotion如下所示。

rtAddInteractivePromotion(//必选参数//来自Jenkins配置的Artifactory服务器ID,或者来自流水线脚本中的配置serverId: 'Artifactory-1', buildName: 'MK', buildNumber: '48', //仅当此构建与Artifactory中的项目相关联时,设置项目键如下。如果设置了,提升窗口将显示这个标签,而不是构建名称和编号。displayName: 'Promote me please', // Artifactory目标存储库的名称targetRepo: 'lib -release-local ' //评论和状态将显示在Artifactory的Build History选项卡中评论:'这是推广评论',状态:'已发布',//指定构建工件的源存储库。sourceRepo: 'lib -snapshot-local', //指示除了构件之外是否提升构建依赖项。默认为False。includeDependencies: true, //当移动或复制文件失败时,是否使升级进程失败。默认为False failFast: true, //是否复制。Move是默认值。副本:true)

你可以加上多个rtAddInteractivePromotion闭包,以便在提升窗口中包含多个构建。


使用Artifactory构建Maven

Maven构建可以解析依赖关系、部署构件并向Artifactory发布构建信息。

Maven的兼容性

  • 支持的Maven最低版本是3.3.9
  • 对Artifacts的部署由部署和安装阶段触发。


要从Pipeline脚本中使用Artifactory运行Maven构建,首先需要创建Artifactory服务器实例,如
创建人工服务器实例部分。

下一步是定义一个rtMavenResolver闭包,它定义依赖项解析细节,以及rtMavenDeployer闭包,它定义了构件的部署细节。这里有一个例子:

rtMavenResolver (id: 'resolver-unique-id', serverId: 'Artifactory-1', releaseRepo: 'libs-release', snapshotRepo: 'libs-snapshot') rtMavenDeployer (id: ' deplover -unique-id', serverId: 'Artifactory-1', releaseRepo: 'libs-release-local', snapshotRepo: 'libs-snapshot-local'), //默认情况下,3个线程用于上传工件到Artifactory。你可以通过设置:threads: 6, //将自定义属性附加到发布的工件:properties: ['key1=value1', 'key2=value2'])

正如您在上面的示例中看到的,解析器和部署器应该有一个唯一的ID,以便稍后在脚本中引用它们。此外,它们还包括一个Artifactory服务器ID以及版本和快照maven存储库的名称。

现在我们可以运行maven构建,引用我们定义的解析器和部署器:

rtMavenRun(//从Jenkins配置的工具名称。tool: MAVEN_TOOL, //如果你想要构建使用Maven Wrapper,设置为true。useWrapper: true, pom: ' Maven -example/pom.xml',目标:'clean install', // Maven选项。options: '- xms1024m - xmx4096m ', resolverId: 'resolver-unique-id', deployerId: ' deplover -unique-id', //如果此处未设置构建名称和构建编号,则使用当前作业名称和编号:buildName: 'my-build-name', buildNumber: '17', //可选-仅当此构建与Artifactory中的项目相关联时,设置项目关键字如下。项目:'my-project-key')

与在rtMavenRun闭包中设置工具不同,您可以使用MAVEN_HOME环境变量设置Maven安装目录的路径,如下所示:

environment {MAVEN_HOME = '/tools/apache-maven-3.3.9'}

如果您希望Maven使用与构建代理的默认JDK不同的JDK,没问题。
只需将JAVA_HOME环境变量设置为所需的JDK路径(bin目录上方的目录的路径,其中包含java可执行文件)。

environment {JAVA_HOME = '/full/path/to/JDK'}


您可能想要做的最后一件事是发布此构建的build-info。看到发布构建信息到Artifactory章节介绍如何进行。


Gradle build with Artifactory

Gradle构建可以解析依赖关系、部署构件并将构建信息发布到Artifactory。

Gradle兼容性

支持的Gradle最低版本是4.10

要从您的Pipeline脚本中使用Artifactory运行Gradle构建,您首先需要创建一个Artifactory服务器实例,如创建人工服务器实例部分。

下一步是定义一个rtGradleResolver闭包,它定义依赖项解析细节,以及rtGradleDeployer闭包,它定义了构件的部署细节。这里有一个例子:

rtGradleResolver (id: 'resolver-unique-id', serverId: 'Artifactory-1', repo: 'jcenter-remote') rtGradleDeployer (id: ' deplover -unique-id', serverId: 'Artifactory-1', repo: 'lib -snapshot-local', //可选-默认情况下,3个线程用于上传工件到Artifactory。你可以通过设置:threads: 6来覆盖这个默认值,//可选-为发布的工件附加自定义属性:properties: ['key1=value1', 'key2=value2'], //可选- Gradle允许通过定义发布作为Gradle构建脚本的一部分来自定义部署的工件列表。// Gradle的发布是用来将工件分组在一起的。您可以选择定义Jenkins应该使用哪个已定义的发布。只有按这些发布分组的工件才会被部署到Artifactory。//如果不定义发布,则使用默认发布,其中包括java项目生成的工件列表。//下面是定义出版物列表的方法。如果你想从gradle脚本中定义的所有出版物中部署工件,你可以设置"ALL_PUBLICATIONS"字符串如下// publications: ["ALL_PUBLICATIONS"])

正如您在上面的示例中看到的,解析器和部署器应该有一个唯一的ID,以便稍后在脚本中引用它们。此外,它们还包括一个Artifactory服务器ID以及版本和快照maven存储库的名称。

如果您正在使用gradle构建一个项目,该项目将生成maven构件,那么您还可以选择定义两个部署存储库作为组件的一部分rtGradleDeployer闭包——一个存储库用于快照工件,另一个用于发布工件。你是这样定义它的:

rtGradleDeployer (id: 'deployer-unique-id', serverId: 'Artifactory-1', releaseRepo: 'lib -release', snapshotRepo: 'lib -snapshot')


现在我们可以运行Gradle构建,引用我们定义的解析器和部署器:

rtGradleRun(//如果Artifactory Plugin已经在构建脚本中定义,则设置为true。usesPlugin: true, // Jenkins配置中的工具名。tool: GRADLE_TOOL, //如果你想要构建使用Gradle Wrapper,设置为true。userwrapper: true, rootDir: 'gradle-examples/gradle-example/', buildFile: 'build. exe '。gradle', tasks: 'clean artifactoryPublish', resolverId: 'resolver-unique-id', deployerId: ' deplover -unique-id', //如果此处未设置构建名称和构建号,则使用当前作业名称和编号:buildName: 'my-build-name', buildNumber: '17', //可选-仅当此构建与Artifactory中的项目相关联时,设置项目关键字如下。项目:'my-project-key')

如果您希望Gradle使用不同于构建代理默认的JDK,没问题。
只需将JAVA_HOME环境变量设置为所需的JDK路径(bin目录上方的目录的路径,其中包含java可执行文件)。
你可以这样做:

environment {JAVA_HOME = '/full/path/to/JDK'}


您可能想要做的最后一件事是发布此构建的build-info。看到发布构建信息到Artifactory章节介绍如何进行。

您还可以选择在gradle构建脚本中定义默认值。阅读更多在这里



使用Artifactory构建Python

Python构建可以解析依赖关系、部署构件并向Artifactory发布构建信息。要使用Artifactory运行Python构建,请遵循以下步骤,以确保您的Jenkins代理已准备就绪:

  1. 确保Python已安装在生成代理上,并且python命令在PATH中。
  2. 安装皮普.你可以使用皮普的文档使用pip和虚拟环境安装软件包
  3. 确保setuptools安装。你可以使用安装软件包文档
  4. 通过从终端运行以下命令来验证构建代理是否准备就绪:
输出Python版本:> Python——version输出pip版本:> pip——version检查wheel是否安装:> wheel -h检查setuptools是否安装:> pip show setuptools检查虚拟环境是否激活:> echo $VIRTUAL_ENV

要从Pipeline脚本运行Python构建,首先需要创建一个Artifactory服务器实例,如创建人工服务器实例部分。

下一步是定义一个rtPipResolver,它定义了依赖项解析的详细信息。这里有一个例子:

rtPipResolver (id: "resolver-unique-id", serverId: "Artifactory-1", repo: "pip-virtual")

正如您在上面的示例中看到的,解析器应该有一个惟一的ID,以便稍后在脚本中引用它。此外,它还包括一个Artifactory服务器ID和存储库的名称。

现在我们可以用rtPipInstall闭包,以解析PIP依赖项。注意,闭包引用了我们上面定义的解析器。

rtPipInstall (resolverId: "resolver-unique-id", args: "-r python-example/requirements.txt", envActivation: virtual_env_activation, // Jenkins在执行这一步时会生成一个新的java进程。//您可以选择将任何java参数传递给这个新进程。javaArgs: '-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005' //如果此处未设置构建名称和构建编号,则使用当前作业名称和编号:buildName: 'my-build-name', buildNumber: '17', //可选-仅当此构建与Artifactory中的项目相关联时,设置项目密钥如下。项目:'my-project-key')

注意到envActivation属性。这是一个可选属性。自通常建议在虚拟环境中运行PIP命令,以实现PIP构建的隔离。要遵循此建议,您可以选择使用envActivation通过发送一个shell脚本作为其值,用于设置虚拟环境。

在大多数情况下,您的构建还会生成工件。生成的工件可以使用rtUpload闭包,如上传和下载文件节。

您可能想要做的最后一件事是发布此构建的build-info。看到发布构建信息到Artifactory章节介绍如何进行。

关于build-info的更多信息:您还可以选择自定义build-info模块名称。你可以通过加上模块属性赋给rtPipInstall结语如下:

rtPipInstall (resolverId: "resolver-unique-id", args: "-r python-example/requirements.txt", envActivation: virtual_env_activation, module: 'my-custom-build-info-module-name')


NuGet和。net核心构建与Artifactory

Artifactory Plugin与NuGet和。net Core客户端的集成允许构建解析依赖、部署工件和向Artifactory发布构建信息。

  • 根据您想使用的客户端,请确保nugetdotnet客户端包含在构建代理的PATH中。
  • 如果你在用dotnet客户端,请注意支持的最低版本是。net Core 3.1.200 SDK。

要从Pipeline脚本中使用Artifactory运行NuGet / DotNet Core构建,首先需要创建一个Artifactory服务器实例,如创建人工服务器实例部分。

下一步是定义一个rtNugetResolverrtDotnetResolver(取决于您使用的是使用NuGet还是DorNet Core),它定义了依赖项解析细节。这里有一个例子:

rtNugetResolver (id: 'resolver-unique-id', serverId: 'Artifactory-1', repo: 'lib -nuget') //或rtDotnetResolver (id: 'resolver-unique-id', serverId: 'Artifactory-1', repo: 'lib -nuget')

正如您在上面的示例中看到的,解析器应该有一个惟一的ID,以便稍后在脚本中引用它。此外,它还包括一个Artifactory服务器ID和存储库的名称。

现在我们可以用rtNugetRunrtDotnetRun闭包,以解析NuGet依赖项。注意,闭包引用了我们上面定义的解析器。

rtnugerun (resolverId: "resolver-unique-id", args: "restore ./示例。sln", //可选- Jenkins在这一步的执行过程中生成一个新的java进程。//您可以选择将任何java参数传递给这个新进程。javaArgs: "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005", //可选-默认情况下,构建使用NuGet API协议v2。如果您想使用v3,请在构建实例上设置它,如下所示。apiProtocol: "v3" //如果此处未设置构建名称和构建号,则使用当前作业名称和编号:buildName: 'my-build-name', buildNumber: '17', //可选-仅当此构建与Artifactory中的项目相关联时,设置项目密钥如下。project: 'my-project-key') //或者rtDotnetRun (resolverId: "resolver-unique-id", args: "restore ./示例。sln", // Jenkins在这一步的执行中生成一个新的java进程。//您可以选择将任何java参数传递给这个新进程。javaArgs: "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005", //可选-默认情况下,构建使用NuGet API协议v2。如果您想使用v3,请在构建实例上设置它,如下所示。 apiProtocol: "v3" // If the build name and build number are not set here, the current job name and number will be used: buildName: 'my-build-name', buildNumber: '17', // Optional - Only if this build is associated with a project in Artifactory, set the project key as follows. project: 'my-project-key' )

在大多数情况下,您的构建还会生成工件。工件可以是NuGet包、DLL文件或任何其他类型的工件。生成的工件可以使用rtUpload闭包,如上传和下载文件节。

您可能想要做的最后一件事是发布此构建的build-info。看到发布构建信息到Artifactory章节介绍如何进行。

关于build-info的更多信息:您还可以选择自定义build-info模块名称。你可以通过加上模块属性赋给rtNugetRunrtDotnetRun闭包如下:

rtnugerun (resolverId: "resolver-unique-id", args: "restore ./示例。, module: 'my-custom-build-info-module-name')// OR rtDotnetRun ( resolverId: "resolver-unique-id", args: "restore ./Examples.sln", module: 'my-custom-build-info-module-name' )



使用Artifactory构建NPM

NPM构建可以解析依赖关系、部署构件并向Artifactory发布构建信息。要从Pipeline脚本中使用Artifactory运行NPM构建,首先需要创建一个Artifactory服务器实例,如创建人工服务器实例部分。

下一步是定义一个rtNpmResolver闭包,它定义依赖项解析细节,以及rtNpmDeployer闭包,它定义了构件的部署细节。这里有一个例子:

rtNpmResolver (id: 'resolver-unique-id', serverId: 'Artifactory-1', repo: 'lib -npm-local') rtNpmDeployer (id: ' deplover -unique-id', serverId: 'Artifactory-1', repo: 'lib -npm-local', //为发布的工件附加自定义属性:properties: ['key1=value1', 'key2=value2'])


正如您在上面的示例中看到的那样,解析器和部署器应该具有唯一的ID,以便稍后在脚本中引用它们。此外,它们还包括Artifactory服务器ID和存储库的名称。

现在我们可以用rtNpmInstallrtNpmCi闭包,以解决NPM依赖。注意,闭包引用了我们上面定义的解析器。

rtNpmInstall (// Jenkins配置工具的可选工具名:NPM_TOOL, //项目根目录的可选路径。如果未设置,则假定工作区的根路径为根项目路径。path: 'npm-example', //可选的npm标志或参数。args: '——verbose', resolverId: 'resolver-unique-id', // Jenkins在执行这一步时会生成一个新的java进程。//您可以选择将任何java参数传递给这个新进程。javaArgs: '-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005' //如果此处未设置构建名称和构建编号,则使用当前作业名称和编号:buildName: 'my-build-name', buildNumber: '17', //可选-仅当此构建与Artifactory中的项目相关联时,设置项目密钥如下。项目:'my-project-key')

rtNpmInstall步骤调用npm安装幕后指挥。如果你想用npm ci命令,只需将步骤名称替换为rtNpmCi


为了打包和发布我们项目创建的npm包,我们使用rtNpmPublish闭包,引用我们定义的部署器。

rtNpmPublish (// Jenkins配置工具的可选工具名:'npm-tool-name', //项目根目录的可选路径。如果未设置,则假定工作区的根路径为根项目路径。//在这一步的执行中,Jenkins会生成一个新的java进程。//您可以选择将任何java参数传递给这个新进程。javaArgs: '-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005' //如果此处未设置构建名称和构建编号,则使用当前作业名称和编号:buildName: 'my-build-name', buildNumber: '17', //可选-仅当此构建与Artifactory中的项目相关联时,设置项目密钥如下。项目:'my-project-key')

构建使用npm可执行文件来安装(下载依赖项),并在发布之前打包生成的npm包。默认情况下,Jenkins使用npm可执行文件,它存在于代理的PATH中。您还可以引用Jenkins配置中定义的工具。方法如下:

environment {// NodeJS主目录的路径(不是npm可执行文件的路径)NODEJS_HOME = ' Path /to/the/ NodeJS /home'} //或者environment{//如果在Jenkins配置中定义了一个名为' NodeJS -tool-name'的工具。NODEJS_HOME = "${tool 'nodejs-tool-name'}"}或nodejs(nodeJSInstallationName: 'nodejs-tool-name'){//仅在此代码范围内,使用'nodejs-tool-name'定义的npm。}

如果没有设置npm安装,就会使用在代理的PATH中找到的npm可执行文件。

您可能想要做的最后一件事是发布此构建的build-info。看到发布构建信息到Artifactory章节介绍如何进行。

关于build-info的更多信息:您还可以选择自定义build-info模块名称。你可以通过加上模块属性赋给rtNpmInstallrtNpmPublish闭包如下:


rtNpmInstall (tool: 'npm-tool-name', path: 'npm-example', resolverId: 'resolver-unique-id', module: 'my-custom-build-info-module-name') rtNpmPublish (tool: 'npm-tool-name', path: 'npm-example', deployerId: ' deplover -unique-id' module: 'my-custom-build-info-module-name')


使用Artifactory进行构建

在构建Go项目时,Jenkins可以解析依赖关系,部署工件并将构建信息发布到Artifactory。

请确保go客户端包含在构建代理的PATH中。


要从您的Pipeline脚本运行带有Artifactory的Go构建,您首先需要创建一个Artifactory服务器实例,如创建人工服务器实例部分。

下一步是定义一个rtGoResolver闭包,它定义依赖项解析细节,以及rtGoDeployer闭包,它定义了构件的部署细节。这里有一个例子:


rtGoResolver (id: 'resolver-unique-id', serverId: 'Artifactory-1', repo: 'lib -go-local') rtGoDeployer (id: ' deplover -unique-id', serverId: 'Artifactory-1', repo: 'lib -go-local', //将自定义属性附加到发布的工件:属性:['key1=value1', 'key2=value2'])

正如您在上面的示例中看到的那样,解析器和部署器应该具有唯一的ID,以便稍后在脚本中引用它们。此外,它们还包括Artifactory服务器ID和存储库的名称。

现在我们可以用rtGoRun注意,闭包引用了我们上面定义的解析器。

rtGoRun (path: 'path/to/the/project/root', resolverId: 'resolver-unique-id', args: 'build' //如果此处未设置构建名称和构建号,则使用当前作业名称和编号:buildName: 'my-build-name', buildNumber: '17', //可选-仅当此构建与Artifactory中的项目相关联时,设置项目关键字如下。项目:'my-project-key')

现在项目已经构建完成,您可以打包并将其作为Go包发布到Artifactory。我们使用rtGoPublish闭包,引用我们定义的部署器。

rtgoppublish (path: "path/to/the/project/root ", deployerId: " deploy- unique-id ", version: " 1.0.0 ")

您可能想要做的最后一件事是发布此构建的build-info。看到发布构建信息到Artifactory章节介绍如何进行。

关于build-info的更多信息:您还可以选择自定义build-info模块名称。方法中添加模块属性rtGoRunrtGoPublish闭包如下:

rtgoppublish (path: 'path/to/the/project/root', resolverId: 'resolver-unique-id', args: 'build', module: 'my-custom-build-info-module-name') rtgoppublish (path: 'path/to/the/project/root', deployerId: ' deplover -unique-id', version: '1.0.0', module: 'my-custom-build-info-module-name')


柯南和Artifactory一起建造

柯南是一个C/ c++包管理器。Artifactory Pipeline DSL包括一些api,这些api使您可以使用安装在构建代理上的Conan Client轻松运行Conan构建。在使用Jenkins创建你的第一个柯南构建工作之前,你需要做的是:

1、在Jenkins构建代理上安装最新的柯南客户端。请参阅柯南的文档有关安装说明。

2.将Conan Client可执行文件添加到构建代理的PATH环境变量中,以确保Jenkins能够使用该客户端。

3.中所描述的在Artifactory中创建一个Conan存储库柯南存储库Artifactory文档。

好的。让我们开始编写第一个柯南管道脚本。

让我们从创建一个柯南客户端实例开始:

rtConanClient (id: "myConanClient")

在创建Conan客户端时,您还可以指定Conan用户的主目录,如下所示:

rtConanClient (id: "myConanClient", userHome: "conan/my-conan-user-home")

现在,我们可以通过向新的conan客户端添加一个Artifactory存储库来配置它。在我们的示例中,我们添加了'conan-local'存储库,位于Artifactory服务器中,由预配置的服务器ID引用:

rtConanRemote (name: "myRemoteName", serverId: "Artifactory-1", repo: "conan-local", clientId: "myConanClient", //可选-添加此参数将使conan客户端不会引发错误。如果存在具有所提供名称的现有远程。force: true, //可选-添加此参数将使conan客户端跳过SSL证书的验证。verifySSL: false)

好的。我们已经准备好开始运行柯南命令了。您需要熟悉Conan命令语法,它由Conan Client公开以运行命令。中的命令语法柯南的文档

让我们运行第一个命令:

rtConanRun (clientId: "myConanClient", command: "install . exe ")——build missing”)

接下来我们要做的是使用我们创建的柯南远程。例如,让我们把我们的文物上传到柯南遥控器。注意我们是如何使用前面创建的远程的ID的,它是myRemoteName

rtConanRun (clientId: "myConanClient", command: "upload *——all -r myRemoteName——confirm")

我们现在可以将buildInfo发布到Artifactory,如将构建信息发布到Artifactory部分:

rtPublishBuildInfo (serverId: "Artifactory-1")


Docker使用Artifactory构建

一般

Jenkins Artifactory插件支持管道DSL,允许从Artifactory中提取和推送docker映像。同时收集和发布构建信息到Artifactory。要设置Jenkins构建代理来收集Docker构建的构建信息,请参考设置说明

直接使用Docker守护进程

Jenkins Artifactory Plugin支持通过其REST API直接与docker守护进程一起工作。请确保设置Jenkins与docker和artifacts一起工作,就像上一节提到的那样。

接下来,让我们创建如图所示的Artifactory服务器实例,或者通过以下方式配置它管理|配置系统

rtServer (id: 'Artifactory-1', url: 'http://my-artifactory-domain/artifactory', credentialsId: 'my-credentials-id')

接下来,下面是如何从Artifactory提取docker映像。

从Artifactory提取Docker镜像
rtDockerPull (serverId:“Artifactory-1”形象:ARTIFACTORY_DOCKER_REGISTRY + / hello world:最新的,/ /主持人:/ / OSX:“tcp: / / 127.0.0.1:1234”/ / Linux上可以省略或null主持人:HOST_NAME, sourceRepo: ' docker-remote ', / /如果构建名称和构建数字没有设置,当前工作将使用的姓名和电话号码:buildName: my-build-name, buildNumber:“17”/ /可选,只有这个构建在Artifactory关联到一个项目,把项目主要如下。project: 'my-project-key', // Jenkins在这一步的执行过程中生成一个新的java进程。//您可以选择将任何java参数传递给这个新进程。javaArgs: '-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005')

下面是将图像推送到Artifactory的方法

将Docker映像推送到Artifactory
rtDockerPush (serverId:“Artifactory-1”形象:ARTIFACTORY_DOCKER_REGISTRY + / hello world:最新的,/ /主持人:/ / OSX:“tcp: / / 127.0.0.1:1234”/ / Linux上可以省略或null主持人:HOST_NAME, targetRepo: ' docker-local ', / /自定义属性附加到发布的构件:性质:“项目名称= docker1;状态=稳定',/ /如果构建名称和构建数字没有设置,当前工作将使用的姓名和电话号码:buildName: my-build-name, buildNumber:'17', //可选-仅当此构建与Artifactory中的项目相关联时,按如下方式设置项目密钥。project: 'my-project-key', // Jenkins在这一步的执行过程中生成一个新的java进程。//您可以选择将任何java参数传递给这个新进程。javaArgs: '-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005')

最后,您可以选择将构建信息发布到Artifactory,如下所示。

rtPublishBuildInfo (serverId: 'Artifactory-1', //如果此处未设置构建名称和构建号,则使用当前的作业名称和编号。确保使用与rtDockerPull和/或rtDockerPush步骤相同的值。buildName: 'my-build-name', buildNumber: '17', //可选-仅当此构建与Artifactory中的项目相关联时,设置项目关键字如下。项目:'my-project-key',)



使用Kaniko

rtCreateDockerBuild步骤允许收集发布到Artifactory的docker映像的构建信息Kaniko.看到我们在GitHub上的kaniko项目示例去学习怎么做。

使用臂

rtCreateDockerBuild步骤允许收集发布到Artifactory的docker映像的构建信息tJIB Maven插件.看到我们在GitHub上的maven-jib示例去学习怎么做。由于此示例还使用Artifactory管道api运行maven,因此我们还建议参考使用Artifactory构建Maven节包含在本文档页面中。

扫描构建与JFrog x射线

Jenkins Artifactory插件通过JFrog Artifactory与JFrog Xray集成,允许您扫描构建工件的漏洞和其他问题。如果发现问题或漏洞,您可以选择使构建失败。这种集成需要JFrog Artifactory v4.16在这之上JFrog Xray v1.6及以上。

您可以扫描已发布到Artifactory的任何构建版本。何时发布构建并不重要,只要它在触发JFrog x射线扫描之前发布即可。

以下说明向您展示如何配置Pipeline脚本以扫描构建。

rtServer (id: 'Artifactory-1', url: 'http://my-artifactory-domain/artifactory', credentialsId: 'my-credentials-id') xrayScan (serverId: 'Artifactory-1', //如果此处未设置构建名称和构建编号,则使用当前作业名称和编号:buildName: 'my-build-name', buildNumber: '17', //可选-仅当此构建与Artifactory中的项目相关联时,设置项目密钥如下。project: 'my-project-key', //如果发现构建是脆弱的,作业将默认失败。如果你不希望它失败:failBuild: false)


管理发布包

一般

Jenkins Artifactory Plugin提供了一组用于管理和分发发布包的管道api。这些api需要2.0或更高版本的JFrog分布.这些api使用JFrog Distribution的REST端点,而不是Artifactory REST端点。因此,建议通过以下方式验证是否可以从Jenkins访问JFrog发行版詹金斯|管理|配置系统.本节中所有示例中的serverId值都应该替换为您配置的JFrog平台ID。

为了更容易地开始使用JFrog分发管道api,您可以使用jfrog-distribution-example可用在这里

创建或更新未签名的发布包

dsCreateReleaseBundledsUpdateReleaseBundle步骤在JFrog发行版上创建和更新一个发布包。这些步骤接受已配置的JFrog平台ID以及要创建的发布包名称和发布包版本。这些步骤也接受a文件规范,它定义了Artifactory中要绑定到发布包中的文件。

创建一个发布包
dsCreateReleaseBundle(serverId: "jfrog-instance-1", name: "example-release-bundle", version: "1", spec: """{"files": [{"pattern": "lib -release-local/ artifactoryppipeline .zip"}]}""" "", //默认为"plain_text"。发行说明的语法。可以是'markdown', 'asciidoc'或'plain_text'之一。releaseNotesSyntax: "markdown", //可选。如果设置为true,则自动签署发布包版本。signimmediate: true, //可选。描述发布包版本的发布说明的文件路径。releaseNotesPath: "path/to/release-notes", //可选。签名密钥的密码短语。gpgPassphrase: "abc", //可选。 A repository name at the source Artifactory instance, to store release bundle artifacts in. If not provided, Artifactory will use the default one. storingRepo: "release-bundles-1", // Optional. description: "Some desc", // Optional. Path to a file with the File Spec content. specPath: "path/to/filespec.json", // Optional. Set to true to disable communication with JFrog Distribution. dryRun: true )
更新一个发布包
dsUpdateReleaseBundle(serverId: "jfrog-instance-1", name: "example-release-bundle", version: "1", spec: """ "{"files": [{"pattern": "lib -release-local/ artifactoryppipeline .zip"}]}""" "", //默认为"plain_text"。发行说明的语法。可以是'markdown', 'asciidoc'或'plain_text'之一。releaseNotesSyntax: "", //可选。如果设置为true,则自动签署发布包版本。signimmediate: true, //可选。描述发布包版本的发布说明的文件路径。releaseNotesPath: "path/to/release-notes", //可选。签名密钥的密码短语。gpgPassphrase: "abc", //可选。 A repository name at the source Artifactory instance, to store release bundle artifacts in. If not provided, Artifactory will use the default one. storingRepo: "release-bundles-1", //Optional. description: "Some desc", // Optional. Path to a file with the File Spec content. specPath: "path/to/filespec.json", // Optional. Set to true to disable communication with JFrog Distribution. dryRun: true )


签署发布包

发布包必须在发布之前进行签名。以下是签署发布包的方法。

签署一个发布包
dsSignReleaseBundle(serverId: "jfrog-instance-1", name: "example-release-bundle", version: "1", //可选GPG passphrase gpgPassphrase: "abc", //可选源Artifactory实例的存储库名称,用于存储发布包中的工件。如果没有提供,Artifactory将使用默认的。storingRepo: "release-bundle -1")


发布发布包

下面是发布已签名发布包的方法。

发布一个发布包
dsDeleteReleaseBundle(serverId: "jfrog-instance-1", name: "example-release-bundle", version: "1", //可选分发规则分发规则:"""{"distribution_rules": [{"site_name": "*", "city_name": "*", "country_codes":["*"]}]}""" ", //可选国家代码。不能与'distRules'一起使用。countryCodes:["001", "002"], //可选站点名称。siteName: "my-site", //可选城市名。不能与'distRules'一起使用cityName: "New York", //可选。如果设置为true,则只有在分发完成后才返回响应。sync: true, //可选。设置为true将禁用与JFrog Distribution的通信。dryRun: true}

删除发布包

下面是删除发布包的方法。

dsDeleteReleaseBundle(serverId: "jfrog-instance-1", name: "example-release-bundle", version: "1", //可选分发规则distRules: """{"distribution_rules": [{"site_name": "*", "city_name": "*", "country_codes":["*"]}]}""" "), //可选国家代码。不能与'distRules'一起使用)countryCodes:["001", "002"] //可选站点名称。siteName: "my-site", //可选城市名称。不能与'distRules'一起使用)cityName: "New York", //可选。如果设置为true,则只有在删除完成后才返回响应。sync: true, //可选。如果设置为true,发布包也将在源Artifactory实例上被删除,而不仅仅是在边缘节点上。deleteFromDist: true, //可选。设置为true将禁用与JFrog Distribution的通信。dryRun: true}


建立触发器

Artifactory触发允许在特定Artifactory路径中添加或修改文件时自动触发Jenkins作业。触发器定期轮询Artifactory以检查是否应该触发作业。你可以读到更多在这里

您可以选择在管道中定义Artifactory Trigger。你应该这样做:

首先,创建Artifactory服务器实例,如创建人工服务器实例部分。

接下来,定义触发器,如下所示:

rtBuildTrigger(serverId: "ARTIFACTORY_SERVER", spec: "*/10 * * * *", paths: " general -lib -local/builds/starship")

当作业在部署到Artifactory后被触发时,您可以将触发作业的Artifactory文件的URL存储在环境变量中。你应该这样做:

. environment {RT_TRIGGER_URL = "${currentBuild.getBuildCauses('org.jfrog.hudson.trigger.ArtifactoryCause')[0]?url} "}
  • 没有标签
版权所有©2023 JFrog Ltd.