我安装了copyArtifacts插件并创建了两个自由式作业:experiment-main和experiment-1
experiment-1只是创建了一个名为artifact.txt的文件,其中包含了build #,并将其存档。
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构建。
有什么想法吗?
发布于 2020-09-05 09:33:41
是的,这确实是出乎意料的行为。它不能工作的原因隐藏在"Upstream Project Name“输入字段的帮助文本中:
下游构建是使用文件指纹找到的。也就是说,从构建中触发的构建并不总是被认为是下游构建,但是您需要对构建中使用的文件进行指纹识别,以便让Jenkins跟踪它们。
因此,复制-伪插件依靠指纹数据来确定工作的祖先。因此,您不能使用使用当前作业作为父任务的“下游构建.”特性:指纹记录在post-build步骤中,因此正在进行的example-master生成在寻找匹配的experiment-1生成时没有任何与其相关联的指纹。
可以在构建运行时(例如,通过Groovy)修改指纹信息,但可能最好是完全避免复制-伪插件,并立即在Groovy中实现整个过程。
您最好的选择可能是通过“最后一次成功的构建”引用example-1,并确保这是您以前触发的构建(通常这是正确的,但取决于您的设置可能存在竞争条件)。
发布于 2020-09-15 09:30:30
我发现有一些变量,我可以使用触发构建的数量。为了计算出变量,我只是用env打印了所有环境变量,然后在列表中找到了正确的变量。
然后,我将复制工件插件配置为使用该版本号。

我无法做到@alex建议的那样,只得到子作业的最后一个构建,因为我可能一次有多个工作在使用子作业,但是如果您没有这个问题,这可能对您有用。
https://stackoverflow.com/questions/63673451
复制相似问题