如何在Jenkins Pipeline中实现Shell脚本向Groovy脚本传递值
解决方法
问题根源
Shell 进程和 Jenkins Groovy 运行环境是完全独立的两个进程,你在 Shell 脚本内部定义的code属于子进程局部变量,Shell 执行结束后变量就会销毁,无法直接赋值给外层 Groovy 中定义的code变量。
修复后代码
def code="" pipeline { agent any stages { stage('Hello') { steps { script{ try{ // 用returnStdout参数捕获Shell的标准输出返回给Groovy变量 code = sh( script: '''#!/bin/bash selinium_grid_status=`curl -s -o /dev/null -w "%{http_code}" http://localhost:4444` echo $selinium_grid_status ''', returnStdout: true ).trim() // 去掉Shell输出末尾自带的换行符 echo "获取到的状态码为:${code}" }catch (e){ print "no value" } } } } } }
核心修改说明
- 给
sh步骤添加returnStdout: true配置,该参数会将Shell脚本的所有标准输出内容作为字符串返回给Groovy - Shell脚本最后只需要通过
echo输出你要传递的状态码,输出内容就是返回的字符串 - 调用
.trim()方法去除Shell输出末尾默认带的换行符,避免变量存在多余空白字符 - 直接用外层Groovy的
code变量接收返回值,后续就可以在Groovy环境中正常使用该值
内容的提问来源于stack exchange,提问作者wanderors
相关产品推荐
相关产品推荐

