Есть ли способ сделать работу в Дженкинс взаимоисключающей? - PullRequest
30 голосов
/ 13 сентября 2011

У меня есть несколько заданий в Jenkins, которые используют Selenium для изменения базы данных через интерфейс веб-сайта. Если некоторые из этих заданий выполняются одновременно, это может привести к ошибкам из-за грязного чтения. Есть ли способ заставить некоторые задания в Дженкинсе не работать одновременно? Я бы предпочел не устанавливать или снимать блокировку с базы данных, которая может быть прочитана или изменена любым количеством пользователей, которые также тестируют.

Ответы [ 3 ]

22 голосов
/ 14 сентября 2011

Вам нужен плагин Throttle Concurrent Builds , который позволяет определять глобальные семафоры и семафоры для каждого узла.

Замки и защелки устарели в пользу Throttle Concurrentстроит.

4 голосов
/ 15 сентября 2011

Я испробовал как плагин lock & latches , так и плагин port allocator как способы достижения того, что вы пытаетесь сделать. Ни один из них не работал надежно для меня. Замки и защелки работали иногда, но я иногда получал работу. Использование распределителя портов в качестве хака будет работать, если у вас нет нескольких узлов jenkins, но издержки конфигурации довольно высоки. В конечном итоге я остановился на другом хаке, но он работает надежно и использует основные компоненты Jenkins (без плагинов):

  • создать подчиненный узел, работающий в том же блоке, что и мастер (или нет, если у вас много блоков)
  • дать этому рабу одного исполнителя (ключ)
  • связать 2 (или n) задания, которые не должны выполняться вместе, с этим новым подчиненным узлом
  • дополнительно может установить использование ведомого устройства на «только связанные задания», если оно испортит ваши другие задания, если они будут работать на новом ведомом устройстве

Поскольку у ведомого есть только один исполнитель, связанные с ним задания никогда не могут выполняться вместе.

1 голос
/ 03 августа 2018

Если вы рассматриваете базу данных как общий ресурс, который может использоваться только исключительно, это соответствует сценарию использования плагина Lockable resources .

Он активно развивается и совершенствуется и очень универсален.

...