作为下游运行多个 freestyle jenkins 作业 - 获取构建状态

问题描述 投票:0回答:1

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}")
     }

jenkins jenkins-pipeline jenkins-groovy
1个回答
0
投票

你真正想要的是并行运行所有作业,当它们全部完成时检查所有结果并将构建标记为

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}")
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.