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

Jenkins并行分支失败时如何终止任务?failfast未生效求助

Jenkins并行任务failfast不生效的解决办法

问题根源

你在build步骤中设置了propagate: false,这个参数会阻止下游任务的失败状态向上传播到当前并行分支。Jenkins的parallelsAlwaysFailFast()机制依赖于分支的失败状态来触发终止,因此无法感知到分支内的失败,自然不会停止其他并行任务。

解决办法

有两种可行方案,可根据你的需求选择:

方案1:移除propagate: false(推荐)

直接去掉该参数,让下游任务的失败自动传递给当前分支,这样parallelsAlwaysFailFast()就能立刻检测到失败并终止所有并行分支。

修改后的代码:

stage('compile and clone') {
    steps {
        script {
            tasks = BUILD_TASKS.split(',')
            def jobs = [:]
            for (arg in tasks) {
                jobact = {
                    // ... 其他逻辑 ...
                    // 移除propagate: false,失败会自动向上传播
                    build job: 'xxx', parameters: jobparam[arg]
                    // ... 其他逻辑 ...
                }
                jobs[arg] = jobact
            }
            parallel jobs
        }
    }
}

方案2:保留propagate: false但手动触发失败

如果你需要在失败前执行清理操作,可保留propagate: false,但在build步骤后手动检查构建结果,一旦失败就抛出异常标记当前分支为失败,触发failfast机制。

修改后的代码:

stage('compile and clone') {
    steps {
        script {
            tasks = BUILD_TASKS.split(',')
            def jobs = [:]
            for (arg in tasks) {
                jobact = {
                    // ... 其他逻辑 ...
                    def buildResult = build job: 'xxx', parameters: jobparam[arg], propagate: false
                    // 检查构建结果,失败则抛出异常
                    if (buildResult.result == hudson.model.Result.FAILURE) {
                        error "分支 ${arg} 构建失败,触发快速终止"
                    }
                    // ... 其他清理逻辑 ...
                }
                jobs[arg] = jobact
            }
            parallel jobs
        }
    }
}

注意事项

确保parallelsAlwaysFailFast()配置在正确层级(你当前的options配置是有效的,无需调整),只要分支能正确传递失败状态,failfast就会生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 00:37:38