10

Jenkins 加入插件允许在所有直接下游作业完成后运行作业。

但是,我如何配置一个作业以在所有下游作业完成后运行,而不仅仅是直接的作业?

此图显示了我期望的作业触发流程:

                           A
                           |
                    --+----+------+--
                      |           |
                      v           v
                      B           C
                      |           |
     --+--------+-----+---+--     |
       |        |         |       |
       v        v         v       |
       D        E         F       |
       |        |         |       |
       v        |         |       |
       G        |         |       |
       |        |         |       |
    ---+--------+----+----+-------+--
                     |
                     v
                     J

我在作业 A 上设置了 Join Trigger 以触发最终作业 J。但是,一旦 B 和 C 完成,作业 J 就会启动,不会等待作业 D、E、F 和 G。

这个答案及其评论中,它说路径可以是多个工作深度,并且必须正确使用指纹。但我不知道如何使它工作。

4

2 回答 2

7

如果有人正在寻找简单的方法,只需使用JobFanIn 插件。一旦 C、E、F 和 G 构建并稳定,此插件将允许您在作业 J 上设置触发器

于 2016-03-14T06:54:58.613 回答
5

Join 插件仅在所有内容都分解为依赖关系的“菱形”时才起作用:一个起始作业,一个或多个下游作业,但只有一个深度(D 和 G 是图中的两个深度),然后是单个加入工作。您的依赖结构不遵循该菱形模式。

对于这种特殊情况,我会使用Promoted Builds Plugin。设置 Job A 以进行促销,当触发时运行 Job J。使该促销的触发器成为 B、C、D、E、F、G 的成功完成。或者如果想要最小化它:G、EF、C . 只要确保指纹识别设置正确。

对于指纹识别,在作业 A 期间生成一个文件(或选择现有文件)。对其进行人工处理并对其进行指纹识别。在以下所有作业 BG 中,使用CopyArtifact插件将该文件检索到作业中并在那里对其进行指纹识别。

于 2012-09-04T13:50:16.613 回答