含parallel调用的Jenkins流水线阶段状态显示异常原因咨询
Jenkins 2.150.2流水线parallel块导致阶段状态显示异常问题
这是Jenkins的已知bug,不是你的用法错误。
问题原因
在Jenkins 2.150.2版本里,当流水线的stage内部包含parallel调用时,就算你用try-catch捕获了阶段内的异常,这个阶段的状态也没法正确标记为失败:
- 像示例里的阶段A这种不含
parallel的,能正常显示失败状态 - 而阶段B这种带
parallel的,会错误显示成成功——虽然异常确实被捕获了,但状态没同步到阶段上 - 如果有多个这类带
parallel的阶段,前一个阶段会等后一个阶段跑完才显示失败,最后一个阶段因为没后续触发,就一直显示成功
解决办法
- 升级Jenkins版本:这个bug在Jenkins 2.164及之后的版本里已经被修复了,升级到稳定版是最彻底的解决方式。
- 临时修复方案:
- 你已经发现的,在最后一个带
parallel的阶段后面加个空的parallel块,触发状态更新 - 改用
catchError步骤替代原生的try-catch,它能更好地适配Jenkins的状态管理,保证阶段状态正确同步:node { catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') { stage("A") { error "E" } } catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') { stage("B") { parallel a : {}, b : {} error "E" } } }
catch块里手动标记状态:try { stage("B") { parallel a : {}, b : {} error "E" } } catch(e) { currentBuild.result = 'FAILURE' } - 你已经发现的,在最后一个带
内容的提问来源于stack exchange,提问作者Kekers_Dev
相关产品推荐
相关产品推荐

