【问题标题】:Evaluate variable in Jenkinsfile - single quotes within single quotes评估 Jenkinsfile 中的变量 - 单引号内的单引号
【发布时间】:2021-02-27 16:32:03
【问题描述】:

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

【问题讨论】:

  • 您是否尝试过在 ' 或 $ 之前使用反斜杠,具体取决于您想要的解决方案?
  • 是的,除非我做错了,否则似乎没有效果

标签: jenkins jenkins-pipeline sh terraform


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2011-05-11
    • 2011-09-18
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 2014-12-31
    • 2012-01-25
    • 1970-01-01
    相关资源
    最近更新 更多