如何在Jenkins中将构建产物传递到另一个任务?

29

设置

我在Jenkins中有两个任务:

  • build master - 构建代码并创建一个工件。
  • deploy master - 部署工件。

目前,deploy master 任务使用“从另一个项目复制工件”构建步骤,使用“最新成功构建”选项。

build-master

我的目标

我想将此步骤从“最新成功构建”更改为“由构建参数指定”,以便在部署时选择特定的构建版本,而无需每次修改 deploy master 任务的配置。

我的尝试

首先,我将其更改为“由构建参数指定”。

build-specific

然后,我勾选了“此项目是参数化的”旁边的框,并添加了一个名为 BUILD_SELECTOR 的字符串参数。

parameter

然后,我选择了一个构建版本,并输入 47 这个来自于 build master 任务的构建编号。

此外,我还尝试了API调用。

$.ajax({
  type: 'POST',
  url: 'https://jenkins/job/deploy%20master/build?token=abc7f5abc0c45abcea0646ed858abcde&BUILD_SELECTOR=47'
});

结果

两次都失败,输出如下:

Started by user styfle
[EnvInject] - Loading node environment variables.
Building in workspace C:\Jenkins\jobs\deploy master\workspace
ERROR: Unable to find a build for artifact copy from: build master
Started calculate disk usage of build
Finished Calculation of disk usage of build in 0 seconds
Started calculate disk usage of workspace
Finished Calculation of disk usage of workspace in 0 seconds
Finished: FAILURE

问题

如何正确配置以便在部署时指定构建编号(或其他标识符)?

解决方案更新

感谢 Gerold 的答案,我的解决方案是添加“复制工件的构建选择器”参数,并使用新的环境变量链接到我已经添加的字符串参数。

输入图像描述

2个回答

7
在Jenkins中,每个项目/作业只有一个工作区。构建目录只包含有关构建及其结果的信息。
两者的根目录在“管理Jenkins”→“配置系统”→“高级...”中指定。
要部署先前构建的工件,您必须将其复制到build master中的其他位置,并稍后从deploy master中访问它。
更新:
请参见“Which build”→“Parameter Name”的内联帮助:
“应在上面的构建参数部分中添加具有此名称的参数。有一种特殊的参数类型可供选择构建选择器。”
请使用“Copy Artifact的Build selector”而不是“String Parameter”。

“Build Master” 任务具有“归档工件”的“后构建操作”。编辑配置以按编号指定构建是可行的。因此,我知道这部分是有效的。 - styfle
那个URL可用。我应该尝试在部署中使用完整的URL作为参数吗? - styfle
如果构件名称不变,则“构建编号”应该足够了。这是URL中唯一的变量。 - Gerold Broser
@styfle 请查看内联帮助,了解“构建选择器”的参数名称:“_有一种特殊的参数类型可用于选择构建选择器_”。请使用此参数类型,而不是使用“字符串参数”。 - Gerold Broser
1
请查看文件操作插件中的“文件/文件夹复制”功能。 - Gerold Broser
显示剩余5条评论

6
在下游项目中添加以下内容:"为复制工件构建选择器",而不是使用"字符串参数"。

"Build selector for Copy Artifact" instead of a "String Parameter"!!

从另一个项目复制工件

enter image description here

那就这样。点击“带参数构建”并传递构建号在此输入图像描述

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接