Простой случай, когда у вас есть только одно задание, зависящее от завершения набора других заданий, прост: либо используйте многозадачность, либо используйте плагин потока сборки с parallel { ... }
. Случай, который я пытаюсь решить, более общий, например:
JobA depends on JobX and JobZ
JobB depends on JobY and JobZ
SuperJob depends on JobA and JobB
Я хочу, чтобы каждое из этих заданий запускалось, как только и только после выполнения их предварительных условий.
Похоже, что ни плагин потока сборки, ни плагин соединения, ни плагин задания DSL не имеют для этого хорошего механизма. Я могу, конечно, просто запустить все свои задания и попросить их опросить Дженкинса, но это было бы довольно уродливо.
Еще один тупик — это «триггер задания вверх по течению». Я хочу инициировать конкретную сборку задания, а не просто любой запуск восходящего задания.
обновить
В одном ответе упоминается плагин multijob. Его действительно можно использовать для решения этой проблемы, но планирование и общее время сборки почти всегда являются худшим случаем. Например, предположим этот график зависимостей с указанным временем сборки:
left1 (1m) right1 (55m)
| |
left2 (50m) right2 (2m)
|____________|
|
zip
С плагином multijob вы получаете:
Phase 1:
left1, right1 // done in 55m
Phase 2:
left2, right2 // done in 50m
Phase 3:
zip // total time 105m
Если бы у меня был способ инициировать следующее задание точно после того, как все предварительные условия выполнены, то общее время сборки составило бы всего 57 минут.
Ответ здесь должен объяснить, как я могу добиться такого поведения, желательно без написания собственного механизма опроса.
обновление 1 1/2 В комментариях ниже было предложено сгруппировать левые и правые задачи в одну подзадачу. Да, в данном примере это можно сделать, но сделать это вообще и автоматически очень сложно. Например, предположим, что есть дополнительная зависимость: right2 зависит от left1. При заданном времени сборки оптимальное время сборки не должно меняться, так как левая1 выполняется задолго до того, как запустится правая2, но без этих знаний уже нельзя смешивать левые1 и левые2 в одной группе, не рискуя не иметь прав1 имеется в наличии.
обновление 2
Похоже, здесь нет готового ответа. Кажется, мне придется самому написать системный скрипт groovy. Смотрите мой собственный ответ на вопрос.
обновление 3
В итоге мы разветвили плагин multijob и написали в нем новую логику. Я надеюсь, что мы сможем опубликовать его как новый плагин после некоторой очистки...