不能呈现使用jq的环境变量的groovy sh脚本



我有这一行在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参数被设置为aw -dev。

我一直得到抱怨$ENV变量的错误,说出现了一个意外的括号

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

您可以考虑这样修改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' '''

成功了!