Jenkins流水线阶段返回码1仍通过,需实现失败抛出异常
问题分析与解决方案
你的代码存在两个关键问题,导致无法在命令返回退出码1时让阶段失败:
- 默认情况下,Jenkins的
sh步骤如果执行的命令返回非0退出码,会直接终止当前步骤,后续的获取退出码、判断逻辑根本不会执行。 - 即使
sh "$Command"没有终止,sh 'echo $?'返回的是字符串类型的退出码,和数字1比较时会不匹配,判断条件无法触发。
正确实现方式
使用returnStatus: true参数获取命令的退出码,再判断是否为1,若满足则抛出异常标记阶段失败:
stage('Stage A'){ steps{ script{ container('A'){ // 获取命令的退出码,returnStatus: true 会返回退出码且不终止流水线 def exitCode = sh script: "$Command", returnStatus: true if (exitCode == 1) { // 抛出异常,直接标记当前阶段为失败 error "命令执行返回退出码1,Stage A 失败" } } } } }
关键说明
returnStatus: true:这是Jenkinssh步骤的核心参数,作用是让步骤返回命令的退出码数值,而非命令输出,同时不会因命令返回非0退出码而终止流水线,确保后续判断逻辑能执行。error函数:Jenkins内置的异常抛出函数,调用后会立即将当前阶段标记为失败,并终止后续流水线执行,符合你需要的效果。
内容的提问来源于stack exchange,提问作者amit kumar
相关产品推荐
相关产品推荐

