2016-07-01 5 views
2

Ich verwende Multibranch Pipeline-Projekte, um meine Anwendungen zu erstellen. Wir haben rund 100 Komponenten und viele Pipelineprojekte. Also sagen wir z.B. wir haben:Trigger abhängige Jobs in Multibranch Pipeline-Projekt

Projekt A abhängig von → Projekt B abhängig von → Projekt C

Wir verwenden SCM Abfrage für alle diese Arbeitsplätze. Ich will, dass, sobald ich Projekt C baue, Projekt B gebaut werden sollte und danach das Projekt A gebaut werden sollte. Meine Liste der Abhängigkeiten kann von Projekt zu Projekt variieren.

Ich weiß, dass ein Maven-Projekt diesen mit Build-Trigger → ☑ Bauen umgehen kann, wenn eine SNAPSHOT Abhängigkeit gebaut, aber mit mehrfach verzweigten Pipeline-Plugin, fand keine Möglichkeit, dies zu umgehen.

Irgendwelche Zeiger?

Antwort

1

Es ist ☐ Erstellen Sie nach anderen Projekten gebaut werden in den Zweigen Konfigurationsseiten und kann ausgewählt werden, aber die Zweige Konfigurationen können nicht (Der Menüpunkt Seitenleiste in den Zweigen gespeichert liest gerade View Configuration , nicht Konfigurieren).

Die folgenden als Jenkinsfile sollten tun, was Sie versuchen zu erreichen. Fügen Sie es allen Ihren Filialen hinzu. Im Falle von Änderungen bearbeiten Sie es auf Ihrem master/trunk und cherrypick es in Filialen, die von diesen Änderungen betroffen sind.

// 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) : "" 
    } 

es auf branch1 Laufen:

[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 

Laufen auf branch2: Verwalten Jenkins → In-Prozess

[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 

Denken Sie daran, zunächst verbotene Funktionen mit dem Script Security Plugin unter zu genehmigen Skriptgenehmigung.

+0

Vielen Dank für Ihre Antwort. Werde es ausprobieren. –

+1

@SarojGharat Gern geschehen. Wenn Sie den Leuten hier auf SO danken möchten, siehe [Warum ist Voting wichtig?] (Http://stackoverflow.com/help/why-vote). –

+0

Ich musste den vollständigen Pfad verwenden, um erfolgreich auszulösen –