Jenkins Pipeline中Shell变量使用报错问题排查
Jenkins Pipeline Shell脚本变量执行报错解决方案
问题原因
你遇到的MissingPropertyException是因为Groovy会自动解析双引号字符串中的${}变量。在原始代码里,echo "${pipelineScriptVar}"中的${pipelineScriptVar}被Groovy当成了自身的绑定变量,而非Shell的环境变量,Groovy找不到该变量就抛出了错误。
解决方案
有两种简单的修复方式:
方式1:转义Shell变量的$符号
在Groovy的三重双引号字符串中,用\$转义Shell变量的$,阻止Groovy解析它,让Shell自行处理变量:
pipeline{ agent any stages{ stage('print Vars'){ steps{ script{ String script = """ export pipelineScriptVar='This is a var' echo "\${pipelineScriptVar}" """ sh script } } } } }
方式2:使用Groovy原始字符串(三重单引号)
Groovy的三重单引号字符串不会对内部的任何变量进行插值,直接将完整脚本传给Shell执行:
pipeline{ agent any stages{ stage('print Vars'){ steps{ script{ String script = ''' export pipelineScriptVar='This is a var' echo "${pipelineScriptVar}" ''' sh script } } } } }
为什么env | grep能正常运行?
因为env | grep "pipeline"中没有${}格式的内容,Groovy不会尝试解析任何变量,脚本直接传给Shell执行,此时Shell已经通过export定义了环境变量,所以能正常查到结果。
内容的提问来源于stack exchange,提问作者Bharat P
相关产品推荐
相关产品推荐

