2015-11-18 2 views
2

В одном задании jenkins мы хотим отслеживать несколько ветвей и запускать его только один раз, когда в любом из них есть изменения. Это возможно?Создание jenkins работы только один раз, при отслеживании нескольких ветвей?

Проблема в том, что мы должны запускать кучу заданий для каждой ветки последовательно, и они не должны вмешиваться. Чего мы хотим достичь, например:

[changes on any branch] -> checkout master -> job1 -> job2 -> job3 -> checkout release -> job1 -> job2 -> job3 

Текущее поведение - это то, что задание запускается для каждой ветви с изменениями. Таким образом, если «строить газопровод» было запущено из-за изменений в мастера, можно быть срабатывающие снова вызваны изменениями в выпуске:

[changes on master] -> checkout master -> job1 -> ... -> checkout release -> ... 
[changes on release] -> checkout master -> job1 -> ... -> checkout release -> ... 

Другой (даже лучше) вариантом было бы, чтобы начать одну работу периодически и делайте сборку только для каждой ветви, если она имеет изменения:

for each branch do 
    if branch has changes then 
    job1 
    job2 
    ... 
+0

Я хотел бы сделать также несколько заданий, каждый из которых для конкретной отрасли, как это вы уверены, что нет никаких помех, и это проще отлаживать, если что-то неожиданно ... – sop

+0

@sop Я просто редактировал мой вопрос, чтобы быть более ясным, надеюсь. – SevenEleven

ответ

0

Между тем, я придумал решение самостоятельно.

Теперь выполняется одно задание, которое выполняется регулярно, чтобы выполнить команду git fetch, передать вывод в файл и проверить любые изменения в заданном списке ветвей.

git fetch -v --dry-run > NUL 2> git-fetch.log 

Если это так, то работа цепи с одним «main'-задание для каждой ветви срабатывает. Они также проверяют ранее сохраненный вывод для изменений в конкретной ветви и могут вызывать список подзадач. После этого они запускают все подзаголовки (или пропускают их, когда ничего не изменилось).

Это вид выглядит следующим образом:

- job1 
    git fetch 
    if changes in any branch then trigger job-master 
    - job-master 
    if changes in master then trigger 'sub-jobs' 
    trigger job-feature1 
    - job-feature1 
     if changes in feature1 then trigger 'sub-jobs' 
     trigger feature2 
     - job-feature2 
     if changes in feature2 then trigger 'sub-jobs' 
     ... 
Смежные вопросы