Перезапустите все узлы Jenkins.

Перезапустите все узлы Jenkins.

Я управляю сервером Jenkins (работающим под управлением 2.89.4) с примерно 40 подключенными узлами, каждый из которых работает под управлением Centos7, OSX или Windows (7, 8, 10). Недавно у нас были перебои с электроэнергией, и многие подчиненные узлы потеряли соединение с главным. Это потребовало много ручного удаленного управления и ssh, чтобы снова подключить их все. Поскольку я убедился, что каждый подчиненный процесс запускает сервер, однако мне бы хотелось иметь дополнительную подстраховку, чтобы иметь возможность автоматически перезапускать каждую виртуальную машину и/или коробку, на которой работают эти подчиненные узлы. Проблема в том, что поскольку существует несколько различных типов операционных систем, простого способа сделать это (насколько мне известно) не существует.

Я пробовал использовать скрипт Groovy, но его можно использовать только для перезапуска подчиненной службы, а не самой машины. Вот моя ссылка: https://wiki.jenkins.io/display/JENKINS/Monitor+and+Restart+Offline+Slaves

Я также рассматривал подход с использованием Ansible, но многие машины недоступны, а Ansible требует разных типов скриптов для Windows и Unix.

Лучший подход, который я видел до сих пор, это вот: https://stackoverflow.com/questions/29165080/restart-jenkins-slave-from-master

Но он не объясняет, как запустить это на каждом подчиненном сервере, он просто выглядит так, как будто это выполняется на одном подчиненном сервере. Кто-нибудь делал что-то подобное раньше? Я бы хотел создать одно задание или один скрипт, который может быть выполнен и перезапустит каждый узел (используя команду типа shutdown -r -f), подключенный к Jenkins, независимо от платформы.

решение1

Я решил эту проблему, создав задание Multi-Configuration и выбрав все подчиненные по имени. Затем я добавил два условных шага на основе «Execution Node». Я выбрал только подчиненные Windows для первого и только подчиненные Mac/Centos для второго. Для каждого условного шага я добавил один шаг: Execute Windows Batch Command для условия Windows и Execute Shell для раздела unix. Вот содержимое моих полей Batch и Shell соответственно:

Партия:

echo "Restarting Windows Machine...."
hostname
shutdown -r -f

Оболочка:

echo "Restarting Unix Machine...."
hostname
sudo shutdown -r now

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

Unix_Conditional_Step Windows_Условный_Шаг

Связанный контент