7

是否可以让来自多个上游作业的加入插件复制工件触发 Jenkins 作业?

我正在尝试使用“钻石”作业设置 Jenkins 配置:my-trigger 运行并生成两个作业,my-fork1 和 my-fork2,它们可以同时运行并花费不同的时间,而 Join一旦两个分叉都完成,插件就会启动 my-join 工作。

my-trigger、my-fork1 和 my-fork2 中的每一个都会创建和识别工件(例如,文本文件)。

我想使用“从另一个项目复制工件”工具从 my-join 中的每个上游作业复制工件,并将“哪个构建”参数设置为“触发此作业的上游构建”。但是,我在 my-join 的控制台中看到这样的输出:

在工作区 /path/to/workspace/my-join 中的 build-machine 上远程构建

从“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 正在加入相关工件。

如何获得连接步骤以从上游的多个分叉复制工件?

注意:这个问题的第二点似乎在问同样的事情,但唯一的答案没有解决它,并且已被接受。

感谢张量产品

4

2 回答 2

9

如果每次运行 join-diamond 时使用唯一参数对构建进行参数化,则可以在 CopyArtifact 插件中使用该参数来确定要从哪个构建进行复制。您可能希望指定“最新成功构建”并使用参数和值对其进行限定。

我工作的地方也有类似的情况;多个同时运行的连接菱形。构建中的参数允许下游作业从上游作业中获取正确的工件。

于 2013-05-28T20:40:03.633 回答
0

Jason Swager 提供的解决方案的分步设置:

项目依赖:diamond->fork->diamond_ready

项目“fork”:字符串参数“UNIQUE_ID”(仅内部未使用的虚拟对象)(创建工件并存档工件)

项目“diamond_ready”字符串参数:UNIQUE_ID 从另一个项目复制工件项目名称:fork 参数过滤器:UNIQUE_ID=${UNIQUE_ID}

项目“钻石”:在其他项目上触发参数化构建项目要构建:fork 预定义参数:UNIQUE_ID=${BUILD_TAG} 加入触发器:Post-Join Actions:在其他项目上触发参数化构建项目要构建:diamond_ready 预定义生成器参数:UNIQUE_ID= ${BUILD_TAG}

于 2016-11-19T12:10:58.407 回答