Jenkins Pipeline循环变量传递至Shell脚本时接收为空问题求助
问题原因
- Jenkins侧的循环变量传递逻辑完全正常,从执行日志的
+ bash ./check_access/check.sh 1记录可以确认,val的值已经正确替换并传入Shell命令 - 问题出在Shell脚本的参数读取逻辑:你传入的是位置参数,Shell脚本中未提前定义
val变量的前提下,$val会读取当前Shell环境的同名环境变量,而不是传入的位置参数,因此输出为空
解决方法
方案1(推荐,符合Shell传参规范)
修改Shell脚本的参数读取逻辑,Shell中第一个传入的位置参数对应$1,第二个对应$2,以此类推,将./check_access/check.sh内容修改为:
#!/bin/sh echo "val: $1"
方案2(无需修改现有Shell脚本)
如果要保留Shell脚本中$val的写法,可以将val作为环境变量传给Shell进程,修改Jenkins Pipeline的sh步骤即可:
check = sh (script: """export val=${val}; bash ./check_access/check.sh""", returnStdout: true).trim()
优化建议
如果val的值包含空格、特殊符号,建议传参时加双引号避免解析错误,Pipeline写法调整为:
check = sh (script: """bash ./check_access/check.sh "${val}" """, returnStdout: true).trim()
内容的提问来源于stack exchange,提问作者Yuriy
相关产品推荐
相关产品推荐

