来自多个上游作业的加入插件复制工件是否可能触发Jenkins作业?
我正在尝试使用“钻石”作业来设置Jenkins配置:my-trigger运行并生成两个可以同时运行并占用不同时间的作业my-fork1和my-fork2,两个叉子完成后,加入插件就会启动作业my-join。
每个my-trigger,my-fork1和my-fork2都会创建和指纹工件(比如文本文件)。
我想使用“从另一个项目复制工件”工具从my-join中的每个上游作业复制工件,并将“Which build”参数设置为“触发此作业的上游构建”。但是,我在my-join的控制台中看到这样的输出:
在工作区/路径/到/ workspace / my-join
中的构建机器上远程构建从“my-trigger”内部版本号63复制1个工件
从“my-fork1”内部版本号63复制1个工件
无法从以下位置找到工件副本的构建:my-fork2
并且作业失败了。在这种情况下,my-fork2首先完成,所以my-fork1触发了join步骤。我相信这意味着my-join只记录my-fork1和my-trigger作为上游。如果my-fork1首先完成,那么my-fork2将启动连接,并且在尝试从my-fork1复制时作业失败。
如果我更改配置以从构建“最新成功构建”中复制工件,则构建成功,但是my-trigger可能会连续多次运行,因此无法保证my-join正在加入相关工件。
如何从上游的多个叉子中复制连接步骤?
注意:this question的第二点似乎是在问同样的事情,但唯一的答案是没有解决它,并且已被接受。
由于 张量积
答案 0 :(得分:9)
如果针对join-diamond的每次运行使用唯一参数对构建进行参数化,则可以在CopyArtifact插件中使用该参数来确定要从中复制的构建。您可能希望指定“最新成功构建”并使用参数和值对其进行限定。
我的工作情况类似;多次同时运行连接钻石。构建中的参数允许下游作业从上游作业中获取正确的工件。
答案 1 :(得分:0)
Jason Swager提供的解决方案的逐步设置:
项目依赖项: 金刚石> fork-> diamond_ready
项目“fork”: 字符串参数“UNIQUE_ID”(仅在内部未使用虚拟) (创建artifcat并存档工件)
项目“diamond_ready” 字符串参数:UNIQUE_ID 从另一个项目复制工件 项目名称:fork 参数过滤器:UNIQUE_ID = $ {UNIQUE_ID}
项目“钻石”: 触发参数化其他项目的构建 要构建的项目:fork 预定义参数:UNIQUE_ID = $ {BUILD_TAG} 加入触发器: 加入后行动: 触发参数化其他项目的构建 要构建的项目:diamond_ready 预定义的生成器参数:UNIQUE_ID = $ {BUILD_TAG}