node {
stage('Testing') {
build job: 'Test1', parameters: [string(name: 'Name', value: 'Foo1')], propogate: false, wait: false
build job: 'Test2', parameters: [string(name: 'Name', value: 'Bar1')], propogate: false, wait: false
build job: 'Test3', parameters: [string(name: 'Name', value: 'Baz1')], propogate: false, wait: false
build job: 'Test4', parameters: [string(name: 'Name', value: 'Foo2')], propogate: false, wait: false
build job: 'Test5', parameters: [string(name: 'Name', value: 'Bar2')], propogate: false, wait: false
build job: 'Test6', parameters: [string(name: 'Name', value: 'Baz2')], propogate: false, wait: false
}
}
我有上面的工作循环运行多个自由式詹金斯工作。我有 wait false 和 propagate false 所以它不应该等待工作完成并继续下一个工作
我如何检查构建的状态,如果任何工作失败,我想让那个阶段状态不稳定
如果我尝试检查状态如下。它说 NullPointerException:无法获取空对象的属性“结果” 可能是构建仍在运行,因此无法检查状态..有没有办法用 wait:false 和 propogate:false
检查状态def downstream = build job: TEST1 , wait: false, propagate: false, parameters: parameters)
if (downstream.getResult() != 'SUCCESS') {
unstable(message: "Downstream job result is ${downstream.result}")
}
你真正想要的是并行运行所有作业,当它们全部完成时检查所有结果并将构建标记为
unstable
如果其中一个作业失败。
要实现这一点,您可以使用 parallel 关键字并行运行所有作业,对于每个作业,将
wait
属性设置为 true
并在完成时存储其结果。一旦所有作业完成,检查所有结果以查看其中是否有一个失败,如果失败则将构建标记为不稳定。
类似的东西:
node {
stage('Testing') {
// Map of all jobs and their parameters
def jobs = ['Test1' : [string(name: 'Name', value: 'Foo1')],
'Test2' : [string(name: 'Name', value: 'Bar1')],
'Test3' : [string(name: 'Name', value: 'Baz1')],
'Test4' : [string(name: 'Name', value: 'Foo2')],
'Test5' : [string(name: 'Name', value: 'Bar2')],
'Test6' : [string(name: 'Name', value: 'Baz2')]]
// Map to store all results
def results = [:]
// Run all jobs in parallel
parallel jobs.collectEntries { jobName, jobParams->
["Running job ${jobName}" : {
results[jobName] = build job: jobName, parameters: jobParams, propagate: false, wait: true
}]
}
// Check if there are failed jobs
def failedJobs = results.findAll( it.value.getResult() == 'FAILURE')
if(failedJobs) { // if there are failed jobs mark build as unstable
def failedJobNames = failedJobs.collect{ it.key }.join(', ')
unstable(message: "The following downstream jobs have failed: ${failedJobNames}")
}
}
}