Как я могу предотвратить одновременное выполнение двух проектов Jenkins/сборки?
У меня есть два проекта Jenkins, которые совместно используют базу данных. Их нельзя запускать одновременно. Строго говоря, между ними не существует особой зависимости, кроме concurrency, но в данный момент я частично управляю этим ограничением, запустив один "нижний поток" другого. Это работает большую часть времени, но не всегда. Если во время выполнения второго изменения управления источником произойдёт изменение, первое запустится снова, и они будут выполняться одновременно и, вероятно, оба будут терпеть неудачу.
Это похоже, но не идентично, Как предотвратить выполнение определенных заданий Jenkins одновременно? Разница в том, что у меня нет "количества потоков" "проблема - я уже работаю не более одного потока любого заданного проекта в любой момент, даже в случае, когда две (разные проекты) строят друг друга. Это, кажется, исключает все несколько предложений в этом потоке.
Ответы
Ответ 1
Плагин Locks and Latches должен решить вашу проблему. Создайте блокировку, и оба задания используют один и тот же замок. Это предотвратит одновременное выполнение заданий.
- Установите плагин в "Управление Jenkins: Управление плагинами".
- Определите (укажите имя) свою блокировку в разделе "Управление Jenkins: настройка системы".
- Для каждого задания, которое вы хотите принять участие в исключении,
- in ": Configure: Build Environment," check "Locks",
- и выберите имя блокировки из списка.
Ответ 2
РЕДАКТИРОВАТЬ: Ниже приведена информация от 04/10/2014
Исключающий плагин, https://wiki.jenkins-ci.org/display/JENKINS/Exclusion-Plugin Очень полезно, если несколько построек используют один и тот же ресурс - например. тестовую базу данных. Все, что вам нужно сделать, это обновить конфигурацию всех заданий с помощью этого ресурса, и в результате они никогда не будут работать параллельно, но ждут завершения других.
Взято из: http://www.kaczanowscy.pl/tomek/2012-07/jenkins-plugins-part-iii-towards-continuous-delivery
Этот плагин блокирует выполнение двух или нескольких заданий параллельно.
Чтобы проверить, сделайте это для job1
- Настроить
- В разделе "Проверка среды сборки" установите "Добавить ресурс для управления исключением".
- Затем Добавить → Новый ресурс → Имя → блокировка
- В разделе "Сборка" → "Добавить шаг сборки"
- Начало критического блока
- Добавить шаг сборки → Добавить все, что вы хотите добавить. (добавьте sleep 15, чтобы убедиться, что это длится дольше, чтобы проверить concurrency.)
- Добавить шаг сборки → Критический конец блока
- Повторите вышеуказанные шаги для job2, убедитесь, что вы используете одно и то же имя блокировки "lock".
- вручную создавать оба задания одновременно.
- Следить за ходом выполнения при jenkins → Исключение администрирования.
Ответ 3
Блокируемый плагин ресурсов. Простой и хорошо работающий для меня май 2016 года.
Установите плагин.
В "Управление Jenkins" > "Настройка системы" перейдите в "Заблокированный менеджер ресурсов".
Выберите "Добавить блокируемый ресурс".
Введите значения для поля: имя и нажмите "Сохранить".
Предупреждение: не вводите пробелы в поле "Имя".
В Jenkins > job_name > Configure > General,
Установите флажок: для этой сборки требуются блокируемые ресурсы.
Введите имя или имена в поле значения: Ресурсы.
Запустите сборку.
В поле сборки #number выберите "Заблокированные ресурсы".
Вы должны увидеть что-то вроде: Эта сборка заблокировала следующие ресурсы: resource_name - resource_description.
Запустите другую сборку, в которой используется тот же ресурс.
Вы увидите "Очередь сборки" в статусе/меню Дженкинса с указанием имени задания.
Наведите курсор на текст в меню "Начать", "Ожидание ресурсов", "Ожидание времени".
(также могут использоваться теги/метки ресурса)