#jenkins #jq #aws-cli #amazon-emr #jenkins-groovy
Вопрос:
У меня здесь есть эта строка, которая находится внутри функции groovy, и я пытаюсь вернуть идентификатор кластера
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, говоря, что появляется неожиданная скобка
Комментарии:
1. Какова стоимость ${ENV}?
Ответ №1:
Редко бывает хорошей идеей передавать переменные среды с помощью интерполяции строк. Есть гораздо лучшие способы.
Один из них, который вы могли бы рассмотреть, — это изменение вашего вызова jq следующим образом:
jq -r --arg env "${ENV}" '.Clusters[] | select (.Name=="($env)-emr-cluster") | .Id'
Здесь $env
обычная переменная jq, или, точнее, возможно, определенная константа.
Комментарии:
1. Это отлично работает на терминале bash, но как заставить это работать над отличным сценарием? Мне нужно принять во внимание форматирование, которое должен выполнить groovy
Ответ №2:
Поняв, что генератор фрагментов Дженкинса действительно полезен, я использовал это:
sh '''jq -r --arg env "${ENV}" '.Clusters[] | select (.Name=="\($env)-emr-cluster") | .Id' '''
и это сработало!