Jenkins脚本流水线获取Jar执行值遇空指针异常求助
问题解决步骤
1. 修正echo语句语法错误
你的echo命令写法不符合Groovy语法,会导致解析错误,这是引发空指针异常的直接原因之一。正确写法需使用Groovy字符串插值:
echo "Account Trans Value : ${acctval}"
2. 区分returnStatus和returnStdout的用途
你当前使用returnStatus: true,该参数会让sh步骤返回命令的退出状态码(整数,0表示执行成功,非0表示失败),而非Jar程序输出的业务返回值。如果你的Jar是通过标准输出返回业务数据,应改用returnStdout: true,同时建议去除输出末尾的换行符:
def acctval = sh script: "java -jar accountrans.jar . ", returnStdout: true acctval = acctval.trim() // 清理输出中的多余换行和空格
如果确实需要获取命令的退出状态码,需确保后续逻辑是基于整数状态码的判断,而非业务返回值。
3. 额外可靠性检查
- 确认Jenkins代理节点已安装Java环境,且
java命令在系统PATH中,可添加前置验证:sh 'java -version' - 验证curl下载Jar文件是否成功,避免执行不存在的文件:
sh 'if [ ! -f accountrans.jar ]; then echo "Jar文件下载失败" && exit 1; fi'
修正后的完整阶段代码
stage('Account Process') { sh 'curl --noproxy "*" -X GET https://paraforce.com/artifactory/account/accountrans.jar -o accountrans.jar' // 检查Jar文件是否下载成功 sh 'if [ ! -f accountrans.jar ]; then echo "Jar download failed" && exit 1; fi' // 获取Jar程序的标准输出内容 def acctval = sh script: "java -jar accountrans.jar . ", returnStdout: true acctval = acctval.trim() echo "Account Trans Value : ${acctval}" }
内容的提问来源于stack exchange,提问作者ignaz
相关产品推荐
相关产品推荐

