Как мне указать эту команду в Jenkinsfile, чтобы правильно интерпретировать переменные? - PullRequest
0 голосов
/ 23 апреля 2020

У меня проблемы с командой интерпретировать переменную в декларативном Jenkinsfile. В приведенном ниже примере объясняется, как последняя команда неправильно интерпретирует переменную из-за проблемы с цитированием. Я не уверен, какой синтаксис мне нужно использовать. Я посмотрел на https://gist.github.com/Faheetah/e11bd0315c34ed32e681616e41279ef4 и только запутался.

// this works correctly and sets the instance_id variable
script {
  instance_id = sh(returnStdout: true, script: '''
    aws autoscaling \
      describe-auto-scaling-groups \
      --auto-scaling-group-names my_asg \
      --query 'AutoScalingGroups[*].Instances[?LifecycleState==`InService`].InstanceId' --output text
  ''').trim()
}

// this also works correctly and show the instance_id was set
echo "getting IP for instance $instance_id"

// this DOES NOT work. What do I need to change here?
// get IP address
script {
  ip_address = sh(returnStdout: true, script: '''
    aws ec2 describe-instances \
      --query "Reservations[*].Instances[?InstanceId=='$instance_id'].PrivateIpAddress" \
      --output text
  ''').trim()
}

Когда запускается последняя команда, она выводит это, показывая, что не интерпретирует переменную instance_id:

+ aws ec2 describe-instances --query 'Reservations[*].Instances[?InstanceId=='\'''\''].PrivateIpAddress' --output text

1 Ответ

2 голосов
/ 23 апреля 2020

Последний пример не работает, потому что вы используете для сценария тройные одинарные кавычки:

 ip_address = sh(returnStdout: true, script: '''

Вместо этого используйте тройные двойные кавычки:

ip_address = sh(returnStdout: true, script: """
  aws ec2 describe-instances \
    --query "Reservations[*].Instances[?InstanceId=='$instance_id'].PrivateIpAddress" \
    --output text
""").trim()

Обратите внимание, что вам не нужно экранировать одинарные двойные кавычки в скрипте, но вы должны экранировать $ как \$, если хотите сослаться на переменную оболочки.

Дальнейшее чтение: Groovy - Интерполяция строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...