Jenkins paramerisierter Auslöser + Artefakt kopieren

9

Ich arbeite daran, Jenkins für unsere Release-Builds einzurichten. Ein Release-Build besteht aus einem Windows-Installationsprogramm, das einige Binärdateien enthält, die unter Linux erstellt werden müssen.

Folgendes habe ich bisher:

  • Der Windows-Teil und der Linux-Teil werden als separate Jenkins-Projekte eingerichtet.
  • Das Windows-Projekt wird parametrisiert, wobei das Subversion-Tag zum Erstellen und Freigeben verwendet wird.
  • Als Teil seines Builds löst das Windows-Projekt einen Build desselben Subversion-Tags für das Linux-Projekt aus (mithilfe des Plugins " Parametrisierter Trigger" ) und kopiert dann die Artefakte aus dem Linux-Projekt (mithilfe des Plugins " Artefakt kopieren" ) in den Arbeitsbereich des Windows-Projekts Sie können im Windows-Installationsprogramm enthalten sein.

Wo ich feststecke: Im Moment ist Copy Artifact so eingerichtet, dass es den letzten erfolgreichen Build kopiert. Es scheint robuster zu sein, Copy Artifact so zu konfigurieren, dass es genau aus dem Build kopiert wird, den der parametrisierte Trigger ausgelöst hat, aber ich habe Probleme, herauszufinden, wie das funktioniert. Es gibt eine Option für einen "Build Selector" -Parameter, von dem ich denke, dass er dabei helfen soll, aber ich kann nicht herausfinden, wie er eingerichtet werden soll (und blindes Experimentieren mit verschiedenen Möglichkeiten ist etwas schmerzhaft, wenn der Build eine Stunde dauert oder zwei, um Erfolg oder Misserfolg zu finden).

Wie soll ich das einrichten? Wie funktioniert der Build Selector?

Josh Kelley
quelle

Antworten:

11

Nachdem Sie einen ausgelösten Build abgeschlossen haben, wird eine neue env-Variable auf die Build-Nummer des ausgelösten Builds mit dem Namen TRIGGERED_BUILD_NUMBER_ <Jobname> gesetzt. Damit können Sie die Artefakte gezielt zurückkopieren:

  1. Windows-Build (" WindowsBuild " genannt) ruft den Linux-Build (" LinuxBuild " genannt) unter Verwendung des Plugins "Parametrisierter Trigger" auf.

    Sie haben diesen Teil, überprüfen Sie einfach Block, bis die ausgelösten Projekte ihre Builds abgeschlossen haben, und schlagen Sie den Build natürlich fehl, wenn der Linux-Build fehlschlägt.

  2. Weiter in Ihren Kopierartefakten aus einem anderen Projektschritt :

    Projektname: LinuxBuild

    Welcher Build: Spezifischer Build

    Build-Nummer: $ TRIGGERED_BUILD_NUMBER_LinuxBuild (Alle Projektnamen haben Zeichen, die nicht a-zA-Z oder 0-9 sind und durch _ ersetzt werden. Mehrere Zeichen werden zu einem einzigen _ zusammengefasst.)

Byron Brummer
quelle
Sollte die Umgebungsvariable "$ TRIGGERED_BUILD_NUMBER_ <downstreamjob>" manuell festgelegt werden? Ich kann es weder in den Upstream- noch in den Downstream-Umgebungsvariablen finden.
Harish
1
Im Plugin-Wiki wurde festgestellt, dass $ TRIGGERED_BUILD_NUMBER_ <downstreamjob> automatisch festgelegt wird, wenn "Blockieren, bis die ausgelösten Projekte ihre Builds abgeschlossen haben" aktiviert ist.
Harish