如何强制詹金斯作业等待所有作业循环执行

How to enforce jenkins job to wait until all jobs executed in loop

在此,我要求无需等待即可触发 3 次迭代(示例 3 下)我的作业,但在触发所有 3 个作业后,无论失败或通过,都必须等到所有 3 个作业都成功完成。

我正在使用 wait:true 但这将等待每次迭代,这不是我想要的。 如果我使用 wait:false ,它不会等待循环中的所有迭代完成后,它不会等待下游作业完成。我希望当前作业等到我得到作业结果(3 个管道)。

//job1 is a pipeline job which i am triggering multiple times with different params

stage {
    for(int cntr=0;i<3;i++) {
         build job : "job1",
         parameters: [string(name: 'param1', value:val[cntr] )],
         wait: false
    }
}

我想你真正想要的是 运行 它们并行,然后等到它们全部完成。
为此,您可以使用 parallel 关键字:

parallel: Execute in parallel. Takes a map from branch names to closures and an optional argument failFast >which will terminate all branches upon a failure in any other branch:

parallel firstBranch: {
    // do something
}, secondBranch: {
    // do something else
},
failFast: true|false```

在您的情况下,它可能类似于:

 stage('Build Jobs') {
     def values = ['value1', 'value2', 'value2']
     parallel values.collectEntries {value ->
         ["Building With ${value}": {
             build job : "job1",
                   parameters: [string(name: 'param1', value: value)],
                   wait: true
         }]
     }
 }

或者如果您想使用索引而不是常量列表:

    stage('Build Jobs') {
        def range = 0..2 //  or range = [0, 1, 2]
        parallel range.collectEntries { num ->
            ["Iteration ${num}": {
                build job : "job1",
                      parameters: [string(name: 'param1', value: somefunc(num)],
                      wait: true
            }]
        }
    }

这将并行执行所有作业,然后等到它们全部完成后再继续管道(不要忘记将 build 步骤的 wait 参数设置为 true).
你可以找到更多这样的例子 here.