无法使用使用 jq 的环境变量呈现 groovy sh 脚本

Cannot render groovy sh script with environmental variable that uses jq

我在 groovy 函数中有这一行,我正在尝试 return 集群 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 的错误,说出现了意外的括号

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

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

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

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

在意识到 jenkins 代码片段生成器实际上很有用后,我使用了这个:

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

成功了!