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

Убедитесь, что задание Jenkins запускается один раз в указанное время cron или позже, даже если Jenkins не выполнялся в указанное время cron

У меня есть две вещи, которые несовместимы сразу:

  1. Старый материал: несколько заданий Jenkins Build-server, которые должен выполняться один или несколько раз в день, в настоящее время настроенный с помощью cron для запуска в определенное время. Эти задания иногда выполняются по много часов, и время их выполнения непредсказуемо.
  2. Новое: глобальный ИТ-отдел, который настаивает на том, что они должны иметь возможность исправлять и перезагружать любой сервер и / или агент jenkins по своему желанию - хотя и в пределах некоторых известных периодов обслуживания.
    • Окно может быть описано в синтаксисе cron как от «30 15 19-25 * 6» до «00 20 19-25 * 6».

Добавление обслуживания ломает вещи, по крайней мере, следующим образом:

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

Я, естественно, попросил ИТ-отдел разрешить нам делать это таким образом, чтобы это было совместимо с нашими системами, но этого не произойдет в этом десятилетии. :-(

Я сейчас думаю, как с этим бороться. Мои мысли в настоящее время:

  1. Чтобы минимизировать ущерб
    • Используйте Windows cron, чтобы закрыть службу Jenkins задолго до периода обслуживания, чтобы убедиться, что она не может запуститься во время периода обслуживания, а также для запуска службы Jenkins после периода обслуживания. (Я собираюсь запустить два сценария, которые косвенно изменят параметр запуска службы в реестре.)
  2. Чтобы исправить повреждение, запустите отдельное задание Jenkins при первой загрузке после обслуживания, выполнив следующие действия с помощью Groovy-скрипта
    • Сканируйте набор известных заданий на предмет заданий, которые закончились преждевременно в момент запуска окна обслуживания.
    • Сканируйте набор известных заданий на предмет заданий, которые должны были начаться во время периода обслуживания,
  3. Для каждого задания, найденного на шаге 2, перестраивайте их одно за другим с приоритетом на основе их исходного времени начала.

Но это похоже на сложную задачу и потенциально адскую администрирование.

Какие еще у меня есть варианты?