Подтвердить что ты не робот

Как я могу предотвратить одновременное выполнение двух проектов Jenkins/сборки?

У меня есть два проекта Jenkins, которые совместно используют базу данных. Их нельзя запускать одновременно. Строго говоря, между ними не существует особой зависимости, кроме concurrency, но в данный момент я частично управляю этим ограничением, запустив один "нижний поток" другого. Это работает большую часть времени, но не всегда. Если во время выполнения второго изменения управления источником произойдёт изменение, первое запустится снова, и они будут выполняться одновременно и, вероятно, оба будут терпеть неудачу.

Это похоже, но не идентично, Как предотвратить выполнение определенных заданий Jenkins одновременно? Разница в том, что у меня нет "количества потоков" "проблема - я уже работаю не более одного потока любого заданного проекта в любой момент, даже в случае, когда две (разные проекты) строят друг друга. Это, кажется, исключает все несколько предложений в этом потоке.

4b9b3361

Ответ 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.

Запустите другую сборку, в которой используется тот же ресурс. Вы увидите "Очередь сборки" в статусе/меню Дженкинса с указанием имени задания. Наведите курсор на текст в меню "Начать", "Ожидание ресурсов", "Ожидание времени".

(также могут использоваться теги/метки ресурса)