Jenkins尝试从我触发的构建中复制构件。

4

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

experiment-1 仅会创建名为artifact.txt的文件,并将构建编号写入其中,此后进行归档。

experiment-main 触发 experiment-1 然后尝试按照下面的方法复制artifacts:

enter image description here

但是这是执行后得到的结果:

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 构建。

有什么想法吗?

2个回答

2
我发现有一些变量与触发的构建数量相关,我可以使用它们。为了找到正确的变量,我打印了所有环境变量,然后在列表中找到了正确的变量。
然后我配置了复制工件插件来使用该构建编号。

enter image description here

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

我仍然想要在一个作业中触发任务并从该构建中复制工件,因此这个解决方案对我来说非常完美。 - Tyler Nielsen

1

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

下游构建是使用文件指纹找到的。也就是说,从构建触发的构建并不总是被视为下游构建,但您需要对构建中使用的文件进行指纹处理,以便让Jenkins跟踪它们

因此,Copy-Artifact插件依赖指纹数据来确定作业的祖先关系。因此,您不能使用当前作业作为父级来使用“下游构建...”功能:指纹是在后续构建步骤中记录的,因此正在进行的example-master构建在查找匹配的experiment-1构建时没有任何指纹关联。

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

你最好参考“上次成功构建”中的example-1,确保这是你触发的构建(通常情况下这是正确的,但根据你的设置可能存在竞态条件)。

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