无法使用使用 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\' '''
成功了!
我在 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\' '''
成功了!