在Jenkins中加入时从多个上游作业复制工件

时间:2013-05-28 14:52:13

标签: join jenkins

来自多个上游作业的加入插件复制工件是否可能触发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的第二点似乎是在问同样的事情,但唯一的答案是没有解决它,并且已被接受。

由于 张量积

2 个答案:

答案 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}