Можно ли отложить подключение jenkins к ведомому устройству до запуска сценария облачной инициализации - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть скрипт инициализации в облаке

#cloud-config
package_upgrade: true

packages:
 - openjdk-8-jdk
 - apt-transport-https
 - git
 - jq

groups:
  - docker

users:
 - default
 - name: jenkins
   groups: docker
   homedir: /var/lib/jenkins
   lock_passwd: true
   ssh_authorized_keys:
     - ssh-rsa xyz

Что дается плагину jenkins ec2 при запуске Ubuntu 18.04 AMI.

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

ИНФОРМАЦИЯ: Проверка: java -fullversion sh: 1: java: не найдено

01 ноября 2018 года 20:22:10 ноль ИНФОРМАЦИЯ: Установка: sudo yum install -y java-1.8.0-openjdk.x86_64 sudo: отсутствует tty и не указана программа askpass

01 ноября 2018 20:22:10 ноль ВНИМАНИЕ: Не удалось установить: sudo yum install -y java-1.8.0-openjdk.x86_64

sh: 1: java: не найдено ОШИБКА: невозможно запустить агент для Ubuntu 18.04 (i-xxx) java.io.EOFException: неожиданное завершение потока

Если я попытаюсь снова подключиться к агенту вручную через некоторое время (2/3 минуты), все в порядке:

Агент успешно подключен и подключен к сети

Должен ли скрипт cloud-init запускаться перед SSH-соединением?

У меня никогда не было этой проблемы при использовании Amazon Linux AMI, где я устанавливаю java 8 таким же образом (через скрипт инициализации в облаке). Это что-то особенное в том, как amazon linux запускает облачные сценарии инициализации против ubuntu?

1 Ответ

0 голосов
/ 05 ноября 2018

В конце концов я решил, что проще установить java и создать новый AMI, чтобы полностью избежать этой проблемы.

Я думаю, что, возможно, мои ожидания, что облачный init будет полностью запущен до подключения, могут быть неверными, в основном из-за этого комментария в документации

Дайте экземпляру достаточно времени для запуска и выполнения директив в ваших пользовательских данных, а затем проверьте, что ваши директивы выполнили поставленные вами задачи.

Возможно, один из способов помочь решить эту проблему может состоять в том, чтобы остановить sshd в командах запуска во время установки, а затем запустить его снова, когда все будет сделано, надеюсь, что Jenkins подключится только после того, как все будет готово.

...