【问题标题】:Cannot render groovy sh script with environmental variable that uses jq无法使用使用 jq 的环境变量呈现 groovy sh 脚本
【发布时间】:2021-08-17 16:25:30
【问题描述】:

我在 groovy 函数中有这一行,我正在尝试返回集群 ID

EMR_ID = sh(returnStdout: true, script: "aws emr list-clusters --active --profile \'${PROFILE}\' | jq -r '.Clusters[] | select (.Name=="\'${ENV}\'-emr-cluster") | .Id'")

没有环境变量,这工作正常。 所以 $PROFILE 参数设置为 dev,$ENV 设置为 aws-dev。

我不断收到抱怨 $ENV var 的错误,说出现了意外的括号

【问题讨论】:

  • ${ENV} 的值是多少?

标签: jenkins jq aws-cli amazon-emr jenkins-groovy


【解决方案1】:

使用字符串插值传递环境变量很少是一个好主意。还有很多更好的方法。

您可能会考虑如下修改您对 jq 的调用:

jq -r --arg env "${ENV}" '.Clusters[] | select (.Name=="\($env)-emr-cluster") | .Id'

这里,$env 是一个普通的 jq 变量,或者更准确地说,可能是一个已定义的常量。

【讨论】:

  • 这在 bash 终端上完美运行,但我如何让它在 groovy 脚本上运行?我需要考虑 groovy 需要做的格式
【解决方案2】:

在意识到 jenkins sn-p 生成器确实有用后,我使用了这个:

sh '''jq -r --arg env "${ENV}" \'.Clusters[] | select (.Name=="\\($env)-emr-cluster") | .Id\' '''

它成功了!

【讨论】:

    猜你喜欢
    • 2015-04-30
    • 2019-09-24
    • 1970-01-01
    • 2014-10-05
    • 2023-04-04
    • 2019-12-24
    • 2021-01-22
    • 1970-01-01
    • 2020-04-05
    相关资源
    最近更新 更多