Jenkins Pipeline 如何正确使用字符串插值实现三重单引号内变量展开
问题原因
你遇到的是Groovy字符串插值的规则限制:Jenkins Pipeline中,三重单引号'''包裹的是普通纯字符串,不会解析Groovy层面定义的变量,只有三重双引号"""包裹的GString类型才支持Groovy变量插值。
修改方案
你需要做两处调整即可保留原有功能的同时实现foo变量的插值:
- 将sh步骤的字符串包裹符从三重单引号
'''替换为三重双引号""" - 所有需要留给shell/容器内部解析的变量(比如你已经在用的
ENV_SECRET),$前缀前要加转义符\,避免被Groovy提前解析为空
修改后完整代码如下:
stages { stage('test') { steps { script { def foo = "bar" sh """ docker run \ --rm \ --env secret=\$ENV_SECRET \ python:3.8.12 /bin/bash -c \ "echo $foo" """ } } } }
注意事项
如果你的foo变量包含空格、引号等特殊字符,可以把插值后的变量用单引号包裹,避免shell解析报错,比如将"echo $foo"改为"echo '$foo'"即可。
内容的提问来源于stack exchange,提问作者Kinder9211
相关产品推荐
相关产品推荐

