评估 Jenkinsfile 中的变量 - 单引号内的单引号

Evaluate variable in Jenkinsfile - single quotes within single quotes

我正在 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}\' 都给出完全相同的结果。

所以,经过反复试验,我终于发现这行得通:

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

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