jenkins试图复制我触发的构建中的工件

jenkins试图复制我触发的构建中的工件,jenkins,jenkins-plugins,Jenkins,Jenkins Plugins,我安装了copyArtifacts插件并创建了两个自由式作业:experimentmain和experiment1 experiment-1只需创建一个名为artifact.txt的文件,其中包含构建,并将其存档 experiment main触发experiment-1,然后尝试如下复制工件: 但结果是: Running as SYSTEM Building on master in workspace /var/lib/jenkins/workspace/experiment-main W

我安装了copyArtifacts插件并创建了两个自由式作业:
experimentmain
experiment1

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
这不是我所期望的(或者至少是我所希望的)

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


有什么想法吗?

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

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

因此,复制工件插件依赖指纹数据来确定工作祖先。因此,您不能使用当前作业作为父项的“下游生成…”功能:指纹记录在后期生成步骤中,因此,正在进行的
示例主机构建
在寻找匹配的
实验-1
构建时,没有任何与之相关联的指纹

可以在构建运行时修改指纹信息(例如,通过Groovy),但是,最好完全避免复制工件插件,并立即在Groovy中实现整个过程


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

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

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


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

我仍然想触发作业并在一个作业中复制该构建中的工件,所以这个解决方案对我来说非常有效。