You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins Pipeline:执行顺序子任务并保序同时传递错误状态

解决Jenkins Pipeline顺序子任务执行与状态反馈问题

要实现顺序执行所有子任务,同时让流水线最终状态正确反映子任务的失败情况(只要有子任务失败,流水线最终标记为失败),且不中断后续子任务的执行,可以通过以下方式实现:

核心思路

使用propagate: false参数让子任务失败时不中断流水线执行,同时记录每个子任务的执行结果,所有任务完成后统一判断是否有失败,再手动设置流水线的最终状态。

修改后的Pipeline代码

pipeline {
    agent any
    stages {
        stage('Tests') {
            steps {
                script {
                    // 定义需要顺序执行的子任务列表,便于后续维护
                    def testJobs = ['Test A', 'Test B', 'Test C']
                    // 标记是否有子任务执行失败
                    def hasFailedJob = false

                    testJobs.each { jobName ->
                        // 执行子任务,propagate: false确保失败不中断后续任务
                        def buildStatus = build wait: true, propagate: false, job: jobName
                        // 检查子任务结果,若不为SUCCESS则标记失败状态
                        if (buildStatus.result != 'SUCCESS') {
                            hasFailedJob = true
                        }
                    }

                    // 若存在失败任务,手动抛出错误让流水线最终状态为失败
                    if (hasFailedJob) {
                        error "部分测试子任务执行失败,请查看对应任务日志"
                    }
                }
            }
        }
    }
}

代码说明

  1. script块:用于嵌入Groovy自定义逻辑,实现变量定义和流程控制。
  2. 子任务列表:将子任务名称存入列表,后续新增或修改任务只需调整列表,提升可维护性。
  3. propagate: false:阻止子任务失败时直接中断流水线,保证所有子任务都能执行完毕。
  4. 结果记录与最终判断:遍历执行所有子任务后,根据记录的失败状态,通过error指令手动触发流水线失败,确保最终状态正确反映执行结果。

针对原代码Parallel块的调整(可选)

如果需要保留原代码中的parallel结构(尽管单分支Parallel无实际并行意义),可以将逻辑嵌入Parallel分支内:

pipeline {
    agent any
    stages {
        stage('Tests') {
            steps {
                parallel(
                    'TestSet': {
                        script {
                            def testJobs = ['Test A', 'Test B', 'Test C']
                            def hasFailedJob = false

                            testJobs.each { jobName ->
                                def buildStatus = build wait: true, propagate: false, job: jobName
                                if (buildStatus.result != 'SUCCESS') {
                                    hasFailedJob = true
                                }
                            }

                            if (hasFailedJob) {
                                error "测试任务集执行失败"
                            }
                        }
                    }
                )
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者koxta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 20:45:40