Jenkins Pipeline Post阶段无法传递变量问题求助
解决Jenkins Post阶段Shell脚本变量解析错误的问题
嘿,我一眼就揪出问题所在啦!你碰到的groovy.lang.MissingPropertyException错误,根源是Jenkins Pipeline基于Groovy运行,而你用了Groovy的三重双引号"""包裹shell脚本——这种写法下,Groovy会自动尝试解析里面的${count},把它当成Groovy层面的变量处理,但你根本没在Pipeline脚本里定义这个Groovy变量,自然就报错了。可你本来是想让shell来处理这个count变量的呀!
给你两种简单的修复方案,选哪个都行:
方案一:用三重单引号替代三重双引号
把包裹shell脚本的"""换成''',这样Groovy就不会对里面的内容做变量插值,完全原样传递给shell执行:
post { success { script { sh ''' count=`cat changes.txt | wc -l` echo ${count} if [[ ${count} == 0 ]]; then echo 'condition success' else echo 'condition not success' fi ''' } } }
方案二:转义shell变量的$符号
如果你因为某些原因必须保留三重双引号(比如需要在shell脚本里引用Groovy变量),那就在shell变量的$前面加反斜杠\,告诉Groovy不要解析这个变量,把它留给shell处理:
post { success { script { sh """ count=`cat changes.txt | wc -l` echo \${count} if [[ \${count} == 0 ]]; then echo 'condition success' else echo 'condition not success' fi """ } } }
顺便提一句,这是Jenkins Pipeline里非常常见的小坑,记住三重双引号触发Groovy插值,三重单引号原样传递这个规则,以后就不会再踩类似的坑啦!
内容的提问来源于stack exchange,提问作者Vikram Kumar
相关产品推荐
相关产品推荐

