Jenkins:基于多个上游作业触发单个下游作业

时间:2018-11-01 20:45:21

标签: jenkins triggers

我想在詹金斯建立一条流水线,其中基于多个上游作业的结果应触发一个下游作业。

例如:

Job 1 --> Job 2 -->   Job 5 --> Job 6
          Job 3 -->
          Job 4 -->

作业1:将新代码提交给Git生产时,它应该触发Jobs 2,3和4(这部分我可以使用Post Build Action中的Build Other Jobs选项运行;尽管有任何建议可以改进)也非常感谢)。

作业2,3和4是要在不同测试机上运行的回归。

我无法确定的部分仅是当Job 2,3和4成功时,它应该触发下游Job 5,最终5可以触发6。

我目前正在使用Build Pipeline插件,但是对于一个(下游)到许多(上游)作业却成功了,反之亦然。

非常感谢您的帮助/建议/指导。提前致谢! 干杯!

2 个答案:

答案 0 :(得分:0)

您可以通过在Job 5配置的“构建触发器”部分中使用“在构建其他项目之后构建”来执行此操作。在那里,您将Job2,Job3和Job4添加为依赖项,并设置选项“仅在构建稳定时才触发”(如下图所示)。这样就可以完成工作,并将等待三个工作完成。

Job trigger

但是正如您所说,当Job2,3和4成功时(即使其中一个失败,Job5也会执行),这并没有达到执行Job5的目标。我认为针对您的情况的最佳解决方案是使用一个新作业并将其创建为“管道”作业(我们称其为PipelineJob)。这样,您不必使用自己的配置和依赖项来编辑每个作业,并且可以更轻松地调整管道行为。同样由于错误传播,如果某个阶段也失败,它将失败!这应该可以按预期工作:

pipeline {
    agent any
    stages{
        stage('Phase 1') {
            steps {
                build 'Job1'
            }
        }
        stage('Phase 2') {
            parallel {
                stage('Job 2') {
                    steps {
                        build 'Job2'
                    }
                }
                stage('Job 3') {
                    steps {
                        build 'Job3'
                   }
                }
                stage('Job 4') {
                    steps {
                        build 'Job4'
                   }
                }
            }
        }
        stage('Phase 3') {
            steps {
                build 'Job5'
            }
        }
        stage('Phase 4') {
            steps {
                build 'Job6'
            }
        }
    }
}

答案 1 :(得分:0)

除了@CMassa的答案(是的,这个工作-感谢您的回答),我发现Jenkins的Join Plugin也很适合这种情况。