Перезапустите все узлы 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
) подключен к Дженкинсу независимо от платформы.
1 ответ
Я решил это, создав задание Multi-Configuration и выбрав всех подчиненных по имени. Затем я добавил два условных шага, основанных на "узле выполнения". Я выбрал только ведомых окон для первого и только ведомых Mac/Centos для второго. Для каждого условного шага я добавил один шаг: Выполнить пакетную команду Windows для условия Windows и Выполнить оболочку для раздела unix. Вот содержимое моих коробок Batch и Shell соответственно:
Batch:
echo "Restarting Windows Machine...."
hostname
shutdown -r -f
Ракушка:
echo "Restarting Unix Machine...."
hostname
sudo shutdown -r now
Я закомментировал этапы выключения на данный момент в моей работе, чтобы я не мог случайно перезапустить все перед тестированием. Не забудьте раскомментировать те, прежде чем пытаться запустить это.