2010-04-20 7 views
20

Ich habe zwei Jobs:machen Jenkins (Hudson) Job hängen von einem anderen Job

  1. hochladen
  2. Einführungs-Instanz

I Auflegungs-Instanz machen wollen abhängig von der anderen, so dass Starten Launch-Instanz automatisch U verursacht pload zuerst ausgeführt werden.

Kann ich dies mithilfe von integrierten Jenkins-Funktionen oder mit einem Plugin erreichen?

Bitte beachte, dass ich nicht will Hochladen immer Einführungs-Instanz, auszulösen, was das ist „Build nach anderen Projekten gebaut werden“ Option auf Einführungs-Instanz tun würde. Was ich will, ist mehr analog wie depends Attribut funktioniert in Ant.

+2

Hinweis: Sie könnten die Jobnamen mit "A" und "B" ersetzen, ohne relevant zu verlieren Information. :) – Jonik

+2

Upload und Launch-Instanz macht mir die Frage tatsächlich klarer. – kgilpin

Antwort

24

Haben Sie versucht, die Parametrized Trigger Plugin?

Sie können es als Build-Schritt verwenden und das Kontrollkästchen für "Blockieren, bis die ausgelösten Projekte ihre Builds beenden" markieren. Das sollte genau das sein, wonach Sie suchen.

+0

Danke! Ich habe nicht die Zeit (oder Notwendigkeit), das Plugin jetzt auszuprobieren, aber ja, das sieht nach einem guten Weg aus, es zu tun. – Jonik

+0

Das ist genau das, was ich gesucht habe. Vielen Dank! – clee

+0

Ich habe dieses Plugin installiert, aber die Option "Auslöser/Aufruf baut auf anderen Projekten" aus dem "Build Steps" -Menü ist nicht da. – John

0

Sie können die Downstream- oder Upstream-Abhängigkeiten verwenden. Sie sollten "Build Triggers" -> Build verwenden, nachdem andere Projekte und/oder Post-Build-Aktionen im Konfigurationsbereich des Projekts erstellt wurden.

+0

Sie müssen im Projekt "Update" "Build-Trigger" -> Build after hinzufügen und dort "Launch-instance" eingeben. – khmarbaise

+5

Entschuldigung, Sie scheinen nicht die ganze Frage zu lesen ... Es sagt, dass ich ** nicht * möchte * Upload * immer * Launch-instance * auslösen (aber wenn * Launch-instance * ausgeführt wird, * Upload * sollte zuerst ausgeführt werden). – Jonik

1

Was ist mit dem Gebäude Upload durch Aufruf seiner build URL mit wget als erster Build-Schritt? Dann fügen Sie die Beef Build Schritte von Launch-Instanz hinzu.

Oder für einen schickeren Ansatz, vielleicht die Remote access API verwenden.

+0

+1 für mich auf den richtigen Weg führen! Ein einfacher Zugriff auf die Build-URL funktioniert in unserem Fall nicht, da anonyme Builds deaktiviert sind. Aber ich fand wichtige Hinweise aus dem Link Alejandro Pérez García in den * Kommentaren * dieser "Remote Access API" -Seite. :-) Ich legte Details in separate Antwort: http://stackoverflow.com/questions/2674468/making-hudson-job-depend-on-another-job/2675178#2675178 – Jonik

+0

Ich denke, es ist am fairsten, diese Antwort zu akzeptieren. (Denken Sie daran, überprüfen * Build Triggers -> Trigger baut remote * in Job-Konfiguration, wenn die Sicherheit aktiviert ist; Details in meiner Antwort.) – Jonik

+0

Dies scheint wie eine ziemlich schlechte Idee, und ich würde diese Lösung für andere Benutzer nicht vorschlagen es funktioniert. Andere Lösungen haben mehr Stimmen. – slacy

5

Aha, gefunden! Hier baue ich auf miki's answer, die den Weg zeigten, aber nicht vollständig für mich gelöst.

Wie heißt es in der Spanish-language article about launching Hudson builds, die aus den Kommentaren von Hudsons verbunden war Remote access API page, die Miki verbunden:

En la sección "Build-Trigger" [...] marcamos la opción "Auslöser baut entfernt (z. B. von Skripten)". Al marcár esta opción vemos como aparéce el cuadro de texto "Authentifizierungstoken". Aquí pondremos el nombre del token deautétacación. Hudson bietet eine praktische eingebaute Option für die Auslösung baut fern

alt text http://www.adictosaltrabajo.com/tutoriales/hudsonSubversionPush/hudsonSubversionPush-01.png

(Es scheint, die Vorteile Spanisch zu wissen ... :-)

So stellt sich heraus, zu materialisieren beginnen.In Build-Trigger Abschnitt (von Upload Job in meinem Fall) können Sie Remote-Builds aktivieren und ein Auth-Token (siehe Screenshot oben). Dann können Sie einen Build starten, indem Sie auf eine bestimmte URL zugreifen, die dieses Token enthält. In meinem Fall sieht der erste Build-Schritt von Auflegungs-Instanz wie:

wget http://[hudson-url]/job/Upload/build?token=TEST 
sleep 10 

Dies funktioniert auch, wenn anonyme baut deaktiviert sind und einfach versuchen, die Build-URL zugreifen würde „403 Forbidden“ ergeben.

2

Das Ausführen eines abhängigen Jobs über wget ist keine allgemeine Lösung. Da Jobs asynchron ausgeführt werden, bleibt Ihr Launch-Job nicht hängen und wartet auf den Upload-Job für einen Abschluss. Schlaf ist nur ein schmutziger Hack und ist keine Option für die meisten Fälle ... IMHO die beste Lösung ist zu verwenden: http://wiki.jenkins-ci.org/display/JENKINS/Join+Plugin