Назад | Перейти на главную страницу

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

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

Я пробовал использовать сценарий 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 независимо от платформы.

Я решил это, создав задание с несколькими конфигурациями и выбрав все ведомые устройства по имени. Затем я добавил два условных шага на основе «узла выполнения». Я выбрал только подчиненные устройства Windows для первого и только подчиненные устройства Mac / Centos для второго. Для каждого условного шага я добавил один шаг: «Выполнить пакетную команду Windows» для условия Windows и «Выполнить оболочку» для раздела unix. Вот содержимое ящиков Batch и Shell соответственно:

Партия:

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

Оболочка:

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

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