Jenkins Pipeline中if语句使用退出码判断异常问题咨询
Jenkins Pipeline条件判断错误原因及修复
问题根源
你在代码里犯了变量引用的错误:
- 执行
sh步骤后,返回的退出码被赋值给了脚本块内的局部变量EX_CODE,但条件判断时却调用了env.EX_CODE。 env是Jenkins的环境变量容器,这个局部变量并没有被注入到环境变量中,所以env.EX_CODE的值为null。- 当判断
null == 0时,结果为false,代码自然会进入else分支,输出"Code is Bad"。
修复后的代码
直接使用局部变量EX_CODE进行判断即可:
pipeline{ agent any stages{ stage('Test exitcode'){ steps{ script{ EX_CODE = sh( script: 'echo hello-world', returnStatus: true ) if( EX_CODE == 0 ){ echo "Code is good with $EX_CODE" }else{ echo "Code is Bad with $EX_CODE" } } } } } }
额外说明
如果需要让这个退出码变量在后续的Pipeline步骤中也能使用,可以将局部变量注入到环境变量中:
script{ EX_CODE = sh(script: 'echo hello-world', returnStatus: true) env.EX_CODE = EX_CODE // 将局部变量转为环境变量 if( env.EX_CODE == 0 ){ // ...后续逻辑 } }
不过在同一个脚本块内,直接使用局部变量是更简洁高效的方式。
内容的提问来源于stack exchange,提问作者Yatharth7
相关产品推荐
相关产品推荐

