Я управляю сервером 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
Я закомментировал шаги выключения на данный момент в своей работе, чтобы случайно не перезапустить все перед тестированием. Обязательно раскомментируйте их перед попыткой запустить это.