Um das schnellstmögliche Feedback zu erhalten, möchten wir gelegentlich, dass Jenkins-Jobs parallel ausgeführt werden. Jenkins hat die Möglichkeit, mehrere nachgelagerte Jobs zu starten (oder die Pipeline zu "verzweigen"), wenn ein Job beendet ist. Jenkins scheint jedoch keine Möglichkeit zu haben, einen nachgelagerten Job nur zum Start aller Zweige dieser Gabelung zu führen (oder die Gabelung wieder zusammenzufügen).
Jenkins hat die Schaltfläche "Erstellen, nachdem andere Projekte erstellt wurden", aber ich interpretiere dies als "Diesen Job starten, wenn ein Upstream-Job beendet ist" (nicht "Diesen Job starten, wenn alle Upstream-Jobs erfolgreich sind").
Hier ist eine Visualisierung dessen, wovon ich spreche. Weiß jemand, ob ein Plugin existiert, um das zu tun, wonach ich suche?
Bearbeiten:
Als ich diese Frage ursprünglich im Jahr 2012 stellte, war Jasons Antwort (die Plugins Join und Promoted Build) die beste und die Lösung, mit der ich mich entschieden habe.
Die Antwort von dnozay (The Build Flow Plugin) wurde jedoch ungefähr ein Jahr nach dieser Frage populär gemacht, was eine viel bessere Antwort ist. Für das, was es wert ist, wenn die Leute mir diese Frage heute stellen, empfehle ich das jetzt stattdessen.
Antworten:
Es gibt zwei Lösungen, die ich in der Vergangenheit für dieses Szenario verwendet habe:
Verwenden Sie das Join-Plugin für Ihren Job "Bereitstellen" und geben Sie "Heraufstufen" als Zieljob an. Sie müssten "Funktionstests" und "Leistungstests" als verbundene Jobs angeben und sie in gewisser Weise nach dem Erstellen starten. Das parametrisierte Trigger Plugin ist dafür gut geeignet .
Verwenden Sie das Plugin für gesponserte Builds für Ihren "Bereitstellungs" -Job, geben Sie eine Heraufstufung an, die funktioniert, wenn nachgelagerte Jobs abgeschlossen sind, und geben Sie Funktions- und Leistungstestjobs an. Lösen Sie im Rahmen der Beförderungsaktion den Job "Befördern" aus. Sie müssen die beiden Testjobs noch über "Bereitstellen" starten.
Beide Lösungen haben einen KRITISCHEN Aspekt: Fingerabdrücke müssen korrekt verwendet werden. Folgendes habe ich gefunden:
quelle
Pipeline-Plugin
Sie können das Pipeline Plugin (früher
workflow-plugin
) verwenden.Es enthält viele Beispiele , und Sie können diesem Tutorial folgen .
z.B
Flow Plugin erstellen
Sie können auch das Build Flow Plugin verwenden . Es ist einfach fantastisch - aber es ist veraltet (Entwicklung eingefroren).
Jobs einrichten
Erstellen Sie Jobs für:
Upstream einrichten
build
Erstellen Sie im Upstream (hier ) ein einzigartiges Artefakt, z.Archivieren Sie das
build.tag
Artefakt.build.tag
Datei kopiert und Fingerabdrücke aufzeichnet, können Sie den übergeordneten Auftrag verfolgen.promotion
Job erfolgreich ist.Einrichten der nachgelagerten Jobs
PARENT_JOB_NAME
undPARENT_BUILD_NUMBER
Kopieren Sie die Artefakte aus dem Upstream-
build
Job mit dem Copy Artifact Plugin${PARENT_JOB_NAME}
${PARENT_BUILD_NUMBER}
build.tag
Fingerabdrücke aufzeichnen; das ist entscheidend.
Einrichten des Downstream-Promotion-Jobs
Gehen Sie wie oben beschrieben vor, um eine Upstream-Downstream-Beziehung herzustellen. Es ist kein Build-Schritt erforderlich. Sie können zusätzliche Aktionen nach dem Build ausführen, z. B. "Hey QA, Sie sind dran".
Erstellen Sie einen Build-Flow-Job
Viel Glück.
quelle
Jenkins hat kürzlich erstklassige Unterstützung für Workflows angekündigt .
quelle
Das Multijob-Plugin funktioniert in diesem Szenario hervorragend . Es ist auch praktisch, wenn Sie möchten, dass ein einzelner "Eltern" -Job mehrere "Kind" -Jobs startet, aber dennoch jedes der Kinder manuell für sich ausführen kann. Dies funktioniert durch Erstellen von "Phasen", zu denen Sie 1 zu n Jobs hinzufügen. Der Build wird nur fortgesetzt, wenn die gesamte Phase abgeschlossen ist. Wenn also eine Phase aus mehreren Jobs besteht, müssen alle abgeschlossen sein, bevor der Rest ausgeführt wird. Natürlich kann konfiguriert werden, ob der Build fortgesetzt wird, wenn innerhalb der Phase ein Fehler auftritt.
quelle
Ich glaube, das Workflow-Plugin heißt jetzt Pipeline-Plugin und ist die (derzeit) bevorzugte Lösung für die ursprüngliche Frage, die vom Build Flow-Plugin inspiriert wurde. Es gibt auch ein Tutorial für die ersten Schritte in GitHub.
quelle
Die Antworten von Jason & Dnozay sind gut genug. Aber falls jemand nach einer einfachen Möglichkeit sucht, verwenden Sie einfach das JobFanIn-Plugin .
quelle