Как безопасно перезапустить Дженкинс?

19

Мне нужно внести некоторые изменения в конфигурацию нашего экземпляра Jenkins, которые будут включать перезапуск Jenkins пару раз. Тем не менее, наши разработчики совершают достаточно часто, чтобы я не видел Дженкинса без работ, выполняемых в течение трех дней.

Есть ли собственный способ (либо через графический интерфейс, либо через командную строку) для безопасного перезапуска Jenkins? IE: дождитесь завершения текущих заданий, прежде чем идти вниз, и отслеживайте запуск заданий в очереди, как только Дженкинс вернется.

Я знаю, что есть плагин, но для его установки мне нужно перезапустить Jenkins ...

Alex
источник
Угадай по макушке, но разве отключение рабов не вариант? (насколько я помню, это не останавливает текущие задания, но мешает запуску дополнительных заданий в очереди)
Tensibai
Теоретически, с правильно настроенным экземпляром Jenkins, выполняющим конвейерные задания, вы можете перезапускать главный или подчиненный узлы в любое время. Однако мой опыт говорит об обратном.
Джейхендрен

Ответы:

14

Если вы перейдете к $YOUR_JENKINS_URL/updateCenter/вам, вы должны увидеть следующую страницу:

Здесь вы можете проверить, Restart Jenkins when installation is complete and no jobs are runningкакие из них должны быть достаточно безопасными.

eyalzek
источник
Насколько я понимаю, перезапуск происходит только в том случае, если плагины находятся в процессе установки ... нет способа заставить этот перезапуск произойти без установки плагинов, не так ли?
Алекс
1
@ Алекс Я только что проверил это на своем экземпляре, и для меня это, кажется, всегда работает, независимо от установки плагина. Согласно stackoverflow.com/a/8077830 также должны быть /safeRestartи /restartконечные точки.
eyalzek
1
Но разве не вопрос о перезапуске во время работы?
Дан Корнилеску
@DanCornilescu вопрос гласит: IE: wait for current jobs to finish before going down, and keep track of queued jobs to start once Jenkins comes back up.это именно то, что происходит, когда вы установите этот флажок.
eyalzek
Я спрашивал, поскольку вопрос также заявляет Jenkins without jobs running in three days- что означает, что будет влияние, поскольку некоторые рабочие места будут отсрочены. Но все же лучше, чем потерять работу.
Дан Корнилеску
15

Посещение https: // youjenkinsdomain / safeRestart переведет его в режим, когда он ожидает остановки заданий и затем перезапускается.

Nakilon
источник
2
Мне нужно было использовать этот конкретный ответ, когда наш сервер Jenkins вышел из строя и не смог перезапуститься, когда плагин требовал этого.
kayleeFrye_onDeck
8

Вы можете выполнить команду safeRestart, используя либо API Jenkins Rest ( [jenkins_url] / safeRestart ), либо вы можете выполнить команду через CLI Jenkins .

sudo /etc/init.d/jenkins safeRestart

Выполнение команды CLI

Общий синтаксис выглядит следующим образом (дизайн похож на инструменты, такие как SVN / GIT):

java -jar jenkins-cli.jar [-s JENKINS_URL] команда [параметры ...] [аргументы ...]

JENKINS_URL можно указать через переменную окружения $ JENKINS_URL. Эта переменная среды автоматически устанавливается, когда Jenkins разворачивает процесс во время сборок, что позволяет использовать Jenkins CLI внутри сборки без явной настройки URL-адреса.

ПРИМЕЧАНИЕ. При выполнении команды safeRestart все задания, заданные для выполнения во время перезапуска, будут поставлены в очередь и выполнены, когда сервер снова будет в сети. Убедитесь, что это не вызывает никаких конфликтов при перезагрузке!

PrestonM
источник
1

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

  • Ограничьте доступ к модулю администратора, чтобы не каждый разработчик мог устанавливать плагины
  • Проинструктируйте разработчиков о времени простоя и проинформируйте их заранее
  • Установите все необходимые плагины оптом и перезапустите Jenkins
  • Сообщите разработчикам, что Jenkins готов к использованию

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

Картик Венкатесан
источник
1

Чтобы перезапустить Jenkins вручную, вы можете использовать одну из следующих команд (введя их URL в браузере):

(jenkins_url)/safeRestart- Позволяет завершить все запущенные задания. Новые задания останутся в очереди для запуска после завершения перезапуска.

(jenkins_url)/restart - Принудительно перезапускает, не дожидаясь завершения сборки.

Subhash
источник
0

Посещение « https: // jenkins / safeRestart » не ожидает полного завершения «заданий / сборок» в случае конвейерных заданий.

Кажется, что нужно дождаться окончания шагов и перезапустить Дженкинса и возобновить трубопровод после того, как Дженкинс снова появится.

Мухаммед Файзан-уль-Хак
источник
1
Я думаю, это подразумевается как комментарий к ответу @Nakilon?
Гагелло
0

Дженкинс разработан, чтобы не быть затронутым перезапусками. Исходя из моего опыта, возможно, что сборка может завершиться неудачей из-за перезапуска, но они встречаются редко.

Там, где я работаю, нам приходилось регулярно перезагружать Дженкинс. У нас есть все виды работ, которые вы можете себе представить, некоторые маленькие, некоторые огромные. Лишь однажды мы увидели, что сборка провалилась, когда рассол не подвергался регидратации.

После этого мы всегда делаем безопасный перезапуск сейчас.

Gi0rgi0s
источник