Назад |
Перейти на главную страницу
Убедитесь, что задание Jenkins запускается один раз в указанное время cron или позже, даже если Jenkins не выполнялся в указанное время cron
У меня есть две вещи, которые несовместимы сразу:
- Старый материал: несколько заданий Jenkins Build-server, которые должен выполняться один или несколько раз в день, в настоящее время настроенный с помощью cron для запуска в определенное время. Эти задания иногда выполняются по много часов, и время их выполнения непредсказуемо.
- Новое: глобальный ИТ-отдел, который настаивает на том, что они должны иметь возможность исправлять и перезагружать любой сервер и / или агент jenkins по своему желанию - хотя и в пределах некоторых известных периодов обслуживания.
- Окно может быть описано в синтаксисе cron как от «30 15 19-25 * 6» до «00 20 19-25 * 6».
Добавление обслуживания ломает вещи, по крайней мере, следующим образом:
- Jenkins может не работать, когда должно начаться задание.
- Запущенные задания Jenkins неожиданно завершаются.
В обоих случаях нужен метод, позволяющий определить, была ли данная работа начата в определенное время и позволила ли она «естественным образом» завершить свой ход. В любом случае работа должна быть запланирована как можно скорее после этого.
Я, естественно, попросил ИТ-отдел разрешить нам делать это таким образом, чтобы это было совместимо с нашими системами, но этого не произойдет в этом десятилетии. :-(
Я сейчас думаю, как с этим бороться. Мои мысли в настоящее время:
- Чтобы минимизировать ущерб
- Используйте Windows cron, чтобы закрыть службу Jenkins задолго до периода обслуживания, чтобы убедиться, что она не может запуститься во время периода обслуживания, а также для запуска службы Jenkins после периода обслуживания. (Я собираюсь запустить два сценария, которые косвенно изменят параметр запуска службы в реестре.)
- Чтобы исправить повреждение, запустите отдельное задание Jenkins при первой загрузке после обслуживания, выполнив следующие действия с помощью Groovy-скрипта
- Сканируйте набор известных заданий на предмет заданий, которые закончились преждевременно в момент запуска окна обслуживания.
- Сканируйте набор известных заданий на предмет заданий, которые должны были начаться во время периода обслуживания,
- Для каждого задания, найденного на шаге 2, перестраивайте их одно за другим с приоритетом на основе их исходного времени начала.
Но это похоже на сложную задачу и потенциально адскую администрирование.
Какие еще у меня есть варианты?