在这种情况下,我需要触发我的作业与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
)。
你可以在这里找到更多类似的例子。