如何强制jenkins job等待直到所有job在循环中执行



在这种情况下,我需要触发我的作业与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:并行执行。接受从分支名称到闭包的映射和可选参数failFast>,该参数将在任何其他分支中出现故障时终止所有分支:

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)。
你可以在这里找到更多类似的例子。

最新更新