2012-09-04 8 views
6

Mit dem Jenkins Join Plugin kann ein Job ausgeführt werden, nachdem alle unmittelbar nachgelagerten Jobs abgeschlossen wurden.Jenkins - Job wird ausgelöst, nachdem alle nachgelagerten Jobs abgeschlossen wurden, nicht nur die unmittelbaren

Aber wie kann ich einen Job konfigurieren, der ausgeführt wird, nachdem alle nachgelagerten Jobs abgeschlossen wurden, nicht nur die unmittelbaren Jobs?

Diese Abbildung zeigt die Arbeitsplätze fließen auslösenden erwarte ich:

      A 
          | 
        --+----+------+-- 
         |   | 
         v   v 
         B   C 
         |   | 
    --+--------+-----+---+--  | 
     |  |   |  | 
     v  v   v  | 
     D  E   F  | 
     |  |   |  | 
     v  |   |  | 
     G  |   |  | 
     |  |   |  | 
    ---+--------+----+----+-------+-- 
        | 
        v 
        J 

I Stecher auf Job A Join the final Job J. Allerdings Job J gestartet, sobald B und C beendet auszulösen, wartet nicht für Jobs D, E, F und G.

In this answer und seine Kommentare, sagte es, dass die Pfade mehrere Aufträge tief sein können und Fingerabdrücke korrekt verwendet werden müssen. Aber ich kann nicht herausfinden, wie es funktioniert.

Antwort

5

Das Join-Plugin funktioniert nur, wenn alles in "Diamanten" von Abhängigkeiten aufgeteilt ist: ein einzelner Startjob, ein oder mehrere Downstream-Jobs, aber nur eine Ebene tief (D und G sind zwei Ebenen tief in Ihrem Diagramm), gefolgt von einem einzigen verbundenen Job. Ihre Abhängigkeitsstruktur folgt nicht diesem Rautenmuster. Für diese spezielle Situation würde ich Promoted Builds Plugin verwenden. Richten Sie Job A so ein, dass bei der Auslösung Job J ausgeführt wird. Setzen Sie den Trigger für diese Promotion auf den erfolgreichen Abschluss von B, C, D, E, F, G. Oder wenn Sie ihn minimieren möchten: G, EF, C Stellen Sie sicher, dass der Fingerabdruck korrekt eingerichtet ist.

Für den Fingerabdruck, generieren Sie eine Datei (oder wählen Sie eine vorhandene Datei) während Auftrag A. Artefakt es und Fingerabdruck es. Verwenden Sie in allen folgenden Jobs B-G das CopyArtifact-Plug-in, um diese Datei in den Job zu übernehmen und dort ebenfalls zu erfassen.

+0

Können Sie ein wenig die Fingerabdruck und gefördert Build Setup erarbeiten? Ich fragte fast die gleiche Frage [hier] (http://stackoverflow.com/questions/26101765/jenkins-pipeline-top-level-join-gets-triggered-before-sub-level-join) – dstj

+0

Fertig - Antwort wurde aktualisiert mit zusätzlichen Informationen zum Fingerabdruck. –

3

Falls jemand nach einem einfachen Weg sucht, verwenden Sie einfach JobFanIn plugin. Dieses Plugin ermöglicht es Ihnen, Trigger auf Job J einmal C, E, F & G sind gebaut und stabil

+1

Genau das, was ich brauchte, einfache Build Abhängigkeitslösung danke. – dkanejs

+0

lässt Sie keine Parameter vom Upstream-Job an den zusammengeführten Job übergeben. –

+0

das ist eine Einschränkung, denke ich. Mai-Plugin kann erweitert werden, um dies zu tun, aber mit mehreren Upstream-Projekten, die Parameter übergeben, müssen sie auch Downstream-Job zu behandeln. Wird sehen, ob dies im Plugin hinzugefügt werden kann – Yogesh