Jenkins Groovy中字符串插值未替换为实际值问题
问题原因
shell命令里用单引号包裹yq表达式,导致Jenkins全局变量$IMAGE_TAG和$ARGO_TARGETREVISION无法被shell解析,yq实际拿到的是字面量字符串,而非变量的真实值,所以YAML内容没被修改。
修复方案
把yq命令的单引号换成双引号,让shell能正常展开全局变量;同时调整sh命令的写法提升可读性:
stage('Clone abc repository and prepare abc-installer') { agent { label LABEL_CICD } steps { sshagent(credentials:['jenkins-deploy-password']) { sh ''' whoami PWD=$(pwd) SCRIPT_DIR=${PWD}/installer yq -i ".abc-server.image.tag = \"$IMAGE_TAG\"" ${SCRIPT_DIR}/manifests/abc/values-single.yaml cat ${SCRIPT_DIR}/manifests/abc/values-single.yaml yq -i ".spec.source.targetRevision = \"$ARGO_TARGETREVISION\"" ${SCRIPT_DIR}/manifests/abc/abc.yaml cat ${SCRIPT_DIR}/manifests/abc/abc.yaml ''' } } }
补充说明
- 改用三重单引号包裹多行sh命令,避免单行转义的繁琐,同时代码可读性更强
- yq表达式里的变量用转义双引号
\"包裹,确保变量值作为合法字符串写入YAML(纯数字变量可省略引号,统一添加更稳妥)
内容的提问来源于stack exchange,提问作者Rohit Choudhary
相关产品推荐
相关产品推荐

