Задача:
У меня есть отличный сценарий, выполняющий несколько экземпляров AWS в качестве узлов параллельно с включенными SSH и HTTP группой безопасности.Общедоступный IPv4 доступен из экземпляра через http://169.254.169.254/latest/meta-data/public-ipv4
.Мне нужно сохранить выходные данные этого запроса в переменной для дальнейшего использования.
То есть, как мой текущий код выглядит (на узле):
String ip = sh([returnStdout: true, label: 'save ip', script: 'curl -s http://169.254.169.254/latest/meta-data/public-ipv4']).toString().trim()
println("Status:", ip)
Сборка завершается с ERROR: script returned exit code 1
.
Неудачные эксперименты:
Я попытался:
sh label: 'save ip', script: 'wget -qO ipv4.txt http://169.254.169.254/latest/meta-data/public-ipv4'
String ip = readFile 'ipv4.txt'
println("Status:", ip)
, и теперь он тоже не работает с ERROR: script returned exit code 1
, но в readFile
.Я даже пытался переместить часть readFile
в коде вниз, и он прошел все шаги после sh
до readFile
.Если я только запускаю часть sh
без сохранения вывода в переменную или чтения файла, сборка завершается успешно (или настолько успешно, насколько это возможно без этой информации).Пример вывода консоли ниже:
+ curl -s http://169.254.169.254/latest/meta-data/public-ipv4
18.202.253.1[Pipeline] unstash
[Pipeline] sh
Я проверил:
- , существует ли файл (он существует)
- содержимое файла (что-то вроде:
34.244.77.254
без перевода строки) - вывод URL (что-то вроде:
34.244.77.254
без перевода строки) - вывод
sh
с returnStatus
(сумасшедшая вещь, яв этом случае получил IP на консольном журнале, и сборка все еще не удалась с выходом 1)
Я также попытался (только для проверки, подозревая некоторую ошибку при наличии возвращаемого значения IP):
sh label: 'save ip', script: 'wget -qO ipv4.txt http://169.254.169.254/latest/meta-data/ami-id'
String ip = readFile 'ipv4.txt'
println("Status:", ip)
и он вел себя как с public-ipv4
.
Дополнительная информация о настройке:
- Jenkins 2.150.3 LTS
- Плагин Amazon EC2 1.42
- Запущены изображения AMI Ubuntu 16.04LTS, Ubuntu 18.04LTS, Debian 9.7
Я благодарен за любые идеи.Я немного застрял здесь, и ни StackOverflow, ни Google не вернули никаких результатов.
Редактировать
Что касается комментария @JRichardsz, я пытался:
String ip = sh([returnStatus: true, label: 'save ip', script: 'curl -s ipv4.txt https://www.google.com']).toString().trim()
println("Status:", ip)
и получил ERROR: script returned exit code 1
тоже.