jenkins - 评估 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}\'
都给出完全相同的结果。
解决方案
所以,经过更多的试验和错误,我终于发现这可行:
sh('''
export MYVAR=["foo","bar"]
terraform apply 'var some_list='${MYVAR}''
''')
即我必须在 ${MYVAR} 之前关闭内部单引号,然后再直接打开它们
推荐阅读
- php - 如何检测 CLI PHP 进程/窗口是否使用“X”按钮关闭?
- python - 如何使用 Graph API 永久删除电子邮件?
- javascript - 有没有办法以 HTML 格式请求访问计算机上的本地存储?
- angular - 使用 akita-ng-fire 时如何避免“this.fireAuth.auth.createUserWithEmailAndPassword 不是函数”
- reactjs - 我已经成功启动了 npm,但是现在当我尝试点击 npm start 时,我发现下面提到的错误:
- node.js - 如何在我的 Google 操作中使用使用 Oauth 操场获得的刷新和访问令牌来调用 People API?
- rust - 如何使用 zbus 列出块设备?
- java - Maven构建依赖问题
- react-native - 如何在场景加载时禁用 iOS 反弹效果?
- javascript - 在 asp.net 网络表单中使用 Sweet 警报删除行