如何强制詹金斯作业等待所有作业循环执行
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.
在此,我要求无需等待即可触发 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.