Простой случай, когда у вас есть только одно задание в зависимости от завершения набора других заданий, легко: либо используйте multijob, либо используйте плагин потока сборки с 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 метров.
Ответ здесь должен объяснить, как я могу получить это поведение, желательно, не называя свой собственный механизм опроса.
update 1 1/2 В комментариях ниже было предложено группировать левые задачи и правильные задачи в одну подзадачу. Да, это можно сделать в этом примере, но это очень сложно сделать в целом и автоматически. Например, предположим, что существует дополнительная зависимость: right2 зависит от left1. При заданном времени сборки оптимальное время сборки не должно меняться, так как left1 длится до начала right2, но без этих знаний вы не можете больше lump left1 и left2 в той же группе, не рискуя не иметь права1 доступный.
обновление 2
Похоже, что нет в готовом виде ответить здесь. Кажется, мне придется самому составить собственный скрипт системы. См. Мой собственный ответ на вопрос.
обновление 3
Мы закончили разветвление multijob плагин и писать новую логику внутри. Надеюсь, мы сможем опубликовать его как новый плагин после некоторой очистки ...
Пожалуйста, укажите решение, если вы найдете один. –
Filed https://issues.jenkins-ci.org/browse/JENKINS-30580, но я боюсь, что мне придется самостоятельно закодировать некоторые опросы ... Можно было бы, например, сразу запустить все задания и то им придется ждать. Возможно, для опроса можно использовать «Веселых исполнителей», а затем запустить их, как только опрос завершится, все предварительные условия выполнены. –
https://gist.github.com/cg-soft/0ac60a9720662a417cfa - мое решение, см. Также ниже. –