Дженкинс (Хадсон) - Управление зависимостями между параллельными сборками - PullRequest
5 голосов
/ 29 января 2012

Используя Дженкинса или Хадсона, я бы хотел создать конвейер сборок с точками разветвления и соединения, например:

     job A
    /      \
 job B    job C
   |        |
 job D      |
    \      /
     job E

Я хотел бы создать произвольные последовательно-параллельные графы , как это, и оставить Дженкинсу свободу планирования для параллельного выполнения B / D и C всякий раз, когда доступно ведомое устройство.

Плагин Join немедленно присоединяется после выполнения B. Плагин Build Pipeline не поддерживает точки разветвления / соединения. Не уверен, что это возможно с плагином Throttle Concurrent Builds (или устаревшим плагином Locks & Latches); если так, я не мог понять, как. Одним из решений может быть указание зависимостей сборки с помощью Apache Ivy и использование плагина Ivy. Тем не менее, все мои работы выполняются на скриптах Makefile C / C ++ / shell, и у меня нет опыта работы с Ivy, чтобы проверить, возможно ли это.

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

Ответы [ 2 ]

7 голосов
/ 07 июня 2012

Существует плагин Build Flow , который отвечает именно этой потребности.Он определяет DSL для указания параллельных заданий.Ваш пример может быть написан так:

build("job A")
parallel (
    {
        build("job B")
        build("job D")
    },
    {
        build("job C")
    }
)
build("job E")

Я только что нашел его, и это именно то, что я искал.

2 голосов
/ 30 января 2012

Есть одно решение, которое может работать на вас.Требуется, чтобы все сборки начинались с одного задания и заканчивались определенной серией заданий в конце каждой цепочки;на вашей диаграмме "задание A" будет начальным заданием, задания C и D - завершающими заданиями.

У задания А создайте файл с отпечатками пальцев.Задание A может затем запустить несколько цепочек сборок, B / D и C в этом примере.Также в задании A добавьте продвижение через плагин Promotions , критерием которого является успешное завершение последовательных заданий - в данном случае C и D. В рамках продвижения включите триггер финалазадание, в вашем случае задание E. Это можно сделать с помощью Parameterized Trigger Plugin .Затем убедитесь, что каждое из заданий, указанных в критериях продвижения, также имеет один и тот же файл и получает один и тот же отпечаток;Я использую плагин Copy Artifact , чтобы каждый раз получать один и тот же файл.

...