首页 > 解决方案 > Jenkins 并行作业 - 如果至少有一个成功(如 successFast)触发另一个作业 - 不要等待所有作业的结果

问题描述

我能够使用并行语法运行并行 Jenkins 作业,并且能够使用 wait: true 和propagate: false 来获取每个子作业的结果。

例子 -

pipeline {
stages {
    stage('Parallel Jobs'){
        steps{
            script{
                def result = parallel(
                        "JobAKey":{
                            build job: "job-A", wait: true, propagate: false, parameters: [string(name: 'param1', value: val1)]
                        },
                        "JobBKey":{
                            build job: "job-B", wait: true, propagate: false, parameters: [string(name: 'param1', value: val1)]
                        }
                    )
                    print(result['JobAKey'].result)
                    print(result['JobBKey'].result)
                    if (result['JobAKey'].result == 'SUCCESS' || result['JobBKey'].result == 'SUCCESS') {
                        build job: "job-C", wait: false, parameters: [string(name: 'param2', value: val2)]
                        build job: "job-D", wait: false, parameters: [string(name: 'param2', value: val2))]
                    }
                }
            }
        }
    }
}

如果一个作业作业-A 或作业-B 中的任何一个返回成功,我想运行作业-C 和作业-D。如果作业-B 快速返回成功,那么我不想等待作业-A 完成(成功/失败),反之亦然。我不知道哪个工作会很快完成并返回 SUCCESS。

使用“wait: True”,并行等待两个作业完成,然后启动作业-C 和作业-D。

有没有类似successFast(如failFast)的东西?

条件是,并行作业列表中的任何一个作业都应该在完成时返回 SUCCESS,以便我们可以开始下一个作业(作业-C 和作业-D)。

提前致谢!

标签: jenkinsjenkins-pipeline

解决方案


推荐阅读