2016-07-01 14 views
2

Я использую проекты Multibranch Pipeline для создания своих приложений. У нас есть более 100 компонентов и многие проекты трубопроводов. Так скажите, например. мы имеем:Задания, зависящие от триггера, в проекте Multibranch Pipeline

Проекта A зависящих от → Проекта B зависящего от → Проекта C

Мы используем опрос SCM для всех этих работ. Я хочу, чтобы после создания проекта C, проект B должен быть построен и после этого должен быть построен проект A. Мой список зависимостей может варьироваться от проекта к проекту.

Я знаю, что проект Maven может справиться с этим с Сложение Триггеры → ☑ Строить всякий раз, когда СНАПШОТ зависимость построена, но с плагином многоотраслевая Pipeline, не нашел способ справиться с этим.

Любые указатели?

ответ

1

Существует ☐ Сложения после других проектов построены в филиалах странице конфигурации и может быть выбрано, но филиалы конфигурация не может быть сохранена (Пункт меню в боковой панели филиалов читает только Просмотр конфигурации , не Настройте).

Следующее как Jenkinsfile должно делать то, что вы пытаетесь достичь. Добавьте его ко всем вашим филиалам. В случае изменений отредактируйте его на своем master/trunk и вибрируйте его в ветви, на которые влияют эти изменения.

// From: Trigger dependent jobs in Multibranch Pipeline project 
//  http://stackoverflow.com/a/38151703/1744774 

String[][] buildChains = [ 
    ['master'], 
    ['branch1', 'master'], 
    ['branch2', 'branch1', 'master'], 
    ['no-build'] 
    // ... further build chains ... 
    ] 

for (buildChain in buildChains) { 
    if (buildChain[0].equalsIgnoreCase(env.BRANCH_NAME)) { 
    int depth = 0 
    for (branch in buildChain) { 
     String depthIndicator = "+" * ++depth 
     //optional: String depthIndicator = new String(new char[++depth]).replace('\0', '+') 
     //optional: String depthIndicator = repeat("+", ++depth) 
     println " $depthIndicator Triggering build for branch '$branch'" 
     build(branch) 
     } // for (branches) 
    break // comment this if there are more build chains for one branch 
    } 
    } // for (buildChains) 


def build(String branch) { 

    switch (branch) { 
    case "master": 
     buildMaster() 
     break 
    case ["branch1", "branch2"]: 
     buildBranch(branch) 
     break 
// case ... 
// ... 

    default: 
     println " --- No build defined for branch \'$branch\' ---" 
    } // switch (branch) 
    } // build(branch) 

def buildMaster() { 
    println ' Building branch \'master\'...' 
    // ... build code ... 
    } 

def buildBranch(String branch) { 
    println " Building branch '$branch'..." 
    // ... build code ... 
    } 

// From: Can I multiply strings in Java to repeat sequences? 
//  http://stackoverflow.com/a/34650746/1744774 
String repeat(String s, int count) { 
    return count > 0 ? s + repeat(s, --count) : "" 
    } 

Запуск его на branch1:

[Pipeline] echo 
    + Triggering build for branch 'branch1' 
[Pipeline] echo 
    Building branch 'branch1'... 
[Pipeline] echo 
    ++ Triggering build for branch 'master' 
[Pipeline] echo 
    Building branch 'master'... 
[Pipeline] End of Pipeline 
Finished: SUCCESS 

Запуск его на branch2:

[Pipeline] echo 
    + Triggering build for branch 'branch2' 
[Pipeline] echo 
    Building branch 'branch2'... 
[Pipeline] echo 
    ++ Triggering build for branch 'branch1' 
[Pipeline] echo 
    Building branch 'branch1'... 
[Pipeline] echo 
    +++ Triggering build for branch 'master' 
[Pipeline] echo 
    Building branch 'master'... 
[Pipeline] End of Pipeline 
Finished: SUCCESS 

Помните утвердить первоначально запрещенные функции с Script Security Plugin под Управление ДженкинсВ процессе Подтверждение подлинности.

+0

Спасибо за ваш ответ. Попробуем. –

+1

@SarojGharat Добро пожаловать. Если вы хотите поблагодарить людей здесь, см. Раздел [Почему важно голосование?] (Http://stackoverflow.com/help/why-vote). –

+0

Мне пришлось использовать полный путь для успешного запуска –