詹金斯试图从我触发的构建中复制工件

jenkins trying to copyArtifacts from a build that I trigger

我已经安装了 copyArtifacts 插件并创建了两个自由式作业:experiment-mainexperiment-1

experiment-1 只是创建一个名为 artifact.txt 的文件,其中包含构建 #,并将其存档。

experiment-main 触发 experiment-1 然后尝试像这样复制工件:

但这是结果:

Running as SYSTEM
Building on master in workspace /var/lib/jenkins/workspace/experiment-main
Waiting for the completion of experiment-1
experiment-1 #4 started.
experiment-1 #4 completed. Result was SUCCESS
Build step 'Trigger/call builds on other projects' changed build result to SUCCESS
ERROR: Unable to find a build for artifact copy from: experiment-1
Finished: FAILURE

这不是我所期望的(或者至少是我所希望的)

我希望它能找到当前构建下游的 experiment-1 构建。

有什么想法吗?

是的,这确实是意外行为。 这不起作用的原因隐藏在“上游项目名称”输入字段的帮助文本中:

Downstream builds are found using fingerprints of files. That is, a build that is triggered from a build isn't always considered downstream, but you need to fingerprint files used in builds to let Jenkins track them.

因此,Copy-Artifact 插件依靠指纹数据来确定工作血统。因此,您不能使用“...的下游构建”功能 将当前作业用作父作业:指纹记录在 post-构建步骤,因此正在进行的 example-master 构建在寻找 experiment-1.

的匹配构建时没有任何关联的指纹

可以在构建 run-time 时修改指纹信息(例如,通过 Groovy),但是,最好完全避免使用 Copy-Artifact 插件并实现Groovy 中的整个过程。

您最好的选择可能是通过“上次成功构建”参考 example-1 并确保这是您之前触发的构建(通常这是正确的,但取决于您的设置是竞争条件)。

我发现有一些变量可以使用触发构建的数量。为了弄清楚变量,我只是用 env 打印了所有环境变量,然后在列表中找到了正确的变量。

然后我将复制工件插件配置为使用该内部版本号。

我不能按照@alex-o的建议去做,只是获取子作业的最后一个构建,因为我可能有多个作业同时使用该子作业,但如果你没有那个问题,这可能对你有用。