У меня есть несколько работ в Jenkins, которые используют Selenium для изменения базы данных через веб-сайт. Если некоторые из этих заданий выполняются одновременно, могут возникнуть ошибки из-за грязных считываний. Есть ли способ заставить определенные рабочие места в Дженкинсе не работать одновременно? Я бы предпочел не размещать и не забирать блокировку в базе данных, которая может быть прочитана или изменена любым количеством пользователей, которые также тестируют.
Есть ли способ сделать работу в Дженкинсе взаимоисключающей?
Ответ 1
Вы хотите, чтобы плагин Throttle Concurrent Builds, который позволяет вам определять глобальные и per-w630 > семафоры.
Замки и защелки устарели в пользу одновременных сборок Throttle.
Ответ 2
Я пробовал как плагин locks and latches, так и порт allocator в качестве способов достижения того, что вы пытаетесь сделать. Ни один из них не работал надежно для меня. Замки и задвижки работали некоторое время, но я иногда занимал рабочие места. Использование распределителя портов в качестве взлома будет работать, если у вас нет нескольких узлов jenkins, но служебные данные конфигурации являются довольно высокими. То, что я в конечном счете уладил, - это еще один взлом, но он работает надежно и использует основной материал Jenkins (без плагинов):
- создать подчиненный node, работающий в том же поле, что и главный (или нет, если у вас много ящиков)
- предоставить этому подчиненному устройству один исполнитель (ключ)
- связать задания 2 (или n), которые не должны запускаться вместе с этим новым ведомым node
- необязательно установить использование подчиненного устройства только на "привязанные задания", если он испортит ваши другие задания, если они будут запущены на новом подчиненном устройстве
Поскольку у подчиненного устройства есть только один исполнитель, привязанные к нему задания никогда не могут работать вместе.