首页 > 解决方案 > 评估 Jenkinsfile 中的变量 - 单引号内的单引号

问题描述

我在 Jenkinsfile 中执行以下操作:

sh('''
   terraform apply 'var some_list=["foo","bar"]'
   ''')

现在,我想将 ["foo","bar"] 放在一个变量中并将其提供给 terraform,所以我这样做:

sh('''
   export MYVAR=["foo","bar"]
   terraform apply 'var some_list=${MYVAR}'
   ''')

然而,这不起作用。${MYVAR} 被解释为文字字符串,而不是将其评估为变量。

我可以这样做:

sh('''
   export MYVAR=["foo","bar"]
   terraform apply var some_list=${MYVAR}
   ''')

在这种情况下,${MYVAR} 被正确解释,但 Terraform 无法将参数解释为列表,因此需要单引号。

也许可以使用双引号代替,即sh("""...""")使用 Groovy 评估,但我还有其他几个变量恰好发生了相反的问题。我真正在寻找的是一种在单引号内使用单引号并仍然评估变量的方法。

有谁知道我怎么能做到这一点?

编辑:

顺便说一句terraform apply 'var some_list=${MYVAR}'terraform apply 'var some_list=\${MYVAR}'并且terraform apply \'var some_list=${MYVAR}\'都给出完全相同的结果。

标签: jenkinsjenkins-pipelineshterraform

解决方案


所以,经过更多的试验和错误,我终于发现这可行:

sh('''
   export MYVAR=["foo","bar"]
   terraform apply 'var some_list='${MYVAR}''
   ''')

即我必须在 ${MYVAR} 之前关闭内部单引号,然后再直接打开它们


推荐阅读