我有这一行在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' '''
成功了!