2013-08-07 4 views
11

Ich habe ein Artefakt als letzter Schritt des Build archiviert und es ist als etwas wie folgt aus: https://xxx.ci.cloudbees.com/job/xxx/52/artifact/target/xxx-1.2.1-SNAPSHOT-r8304-20130807-1507-app.zipJenkins: Verwenden Sie archivierten Artifact in Promoted-Build

Wie kann ich einfach das Artefakt in meiner Promotion Prozess zugreifen? Bitte beachten Sie, dass ich auf den spezifischen Build zugreifen muss, nicht auf den letzten erfolgreichen Build.

Ziel des Heraufstufungsvorgangs ist das Kopieren des Artefakts nach S3, von wo aus unser Bereitstellungsauftrag es weiter verarbeitet. So könnte ich Build # 52 zur Entwicklung fördern (kopiere es in einen spezifischen S3-Bucket), später Build # 50 zur Produktion und so weiter fördern.

Im Idealfall kann ich auf das Artefakt in einem Shell-Skript zugreifen, um die Datei umzubenennen usw. Gibt es eine Umgebungsvariable für den Zugriff auf die archivierten Artefakte eines Builds, die ich nicht finden kann oder wie soll das gemacht werden? $BUILD_URL und $JOB_URL sind bereits für den Heraufstufungsvorgang spezifisch und verweisen nicht auf den Build selbst in Shell-Skripten für den Heraufstufungsjob.

Mit der Kopie Artefakt-Plugin kann ich nur Artefakte aus anderen Builds im Promotion-Prozess kopieren, die ich nicht tun muss.

Antwort

15

Ich glaube, ich habe die Lösung gefunden.

Zusammenfassung

  • Sie nicht durch permalink
  • Verwenden Spezifische Build und setzen Build-Nummer ${PROMOTED_NUMBER}

Die Lösung angegeben verwenden

Voraussetzungen

  • Die Copy Artifact Plugin muss installiert sein. Archiv
  • die Artefakte sollen die Aktionen zugreifen
    • In Aktionen-Post bauen fügen die Aktion Archive die Artefakte und setzen Dateien zu archivieren, was immer Sie Ihre Promotion zugreifen möchten.
  • nicht wegwerfen alte Artefakte
    • Im Auftragskonfiguration, deaktivieren Verwerfen Altbauten oder sicherzustellen, dass seine Einstellungen die Artefakte so lange, wie Sie Ihre baut fördern wollen halten.

Promotion Setup:

Setup-up Ihres Promoted-Build mit Namen und Kriterien wie gewohnt.

Fügen Sie im Abschnitt Aktionen die Aktion hinzu Kopieren Sie Artefakte von einem anderen Projekt, und legen Sie diese Werte fest.

  • Projektname: ${PROMOTED_JOB_NAME}
  • Welche Körperbau: Spezifische Körperbau
  • Build-Nummer: ${PROMOTED_NUMBER}
  • Artefakte zu kopieren: path/to/your/artifacts/**
  • Ziel: ${BUILD_TAG}

fügen Sie dann die verschiedenen Aktionen, die Sie wirklich wollen. Fügen Sie zum Beispiel die Aktion hinzu. Archivieren Sie die Artefakte, um die Artefakte zu speichern. Denken Sie daran, Ihren Pfaden ${BUILD_TAG}, z. die den Inhalt des Arbeitsbereichs des Build erwarten haben ${BUILD_TAG}/path/to/your/artifacts/**

Hinweise zur warum

Kopieren Artefakte

Wie Sie wahrscheinlich wissen jetzt, sollte die Förderung nicht-Zugang. Es kann auf einem anderen Server ausgeführt werden, und es kann möglicherweise auf keinen Arbeitsbereich oder auf den Arbeitsbereich von einem älteren oder neueren Build zugreifen. Es ist daher erforderlich, die Artefakte, die Sie verwenden möchten, in den aktuellen Arbeitsbereich zu kopieren.

Dies ist auch der Grund, warum der Wert Target Wert festgelegt ist. Der Arbeitsbereich ist möglicherweise mit anderen Builds oder Aktionen belegt. Festlegen des Ziels auf ${BUILD_TAG} Verhindert Konflikte mit bereits im Arbeitsbereich vorhandenen Dateien, indem ein für den Heraufstufungsvorgang eindeutiger Ordner erstellt wird.

$ {PROMOTED_ *} Variablen

Wie Sie die normalen Build-Variablen angeben, beziehen sich auf die Förderung selbst, sondern das beworbene Build-Plugin definiert einige environment variables anstelle der tatsächlichen Build verweisen.

Permalinks

In einem Jenkins Kontext permalinks bezieht sich nur auf die speziellen Links, die auf den neuesten irgendeiner Art Punkte oder die neueste Promotion. Deshalb erhalten Sie immer die neueste Version

In meiner Version von Jenkins wird das Dropdown durch ein Textfeld ersetzt.Schreiben der URL zu einem bestimmten Build wie http://jenkins/job/myjob/59/ ist not recognized als einer der speziellen Permalinks und das Kopieren will thus fail.

+0

Dies wählt tatsächlich den richtigen Build. Ziemlich obskure, aber großartige Lösung! – xeraa

+0

Dies sollte in der Dokumentation "Promoted Builds" enthalten sein –

5

Sie können das Copy Artifact-Plugin verwenden. Legen Sie fest, dass Artefakte vom Hauptprojekt kopiert werden sollen, und wählen Sie Angegeben von Permalink, wobei der Permalink ist. Letzte Aktion: Dieser Heraufstufungsprozess.

(Beachten Sie, dass, da die Förderung Konfiguration hier auf sich selbst verweist, können Sie nicht so eine Förderung in einem Schritt hinzuzufügen. Sie die Förderung ohne Build-Schritt hinzufügen müssen, speichern, dann gehen Sie zurück und die Build-Schritten)

+0

Ich finde die Benennung ein wenig verwirrend, aber das ist definitiv ein Schritt in die richtige Richtung. Bei einem kleinen Test habe ich folgendes Verhalten festgestellt: Der erste Promotion-Prozess nimmt das aktuelle Artefakt. Jede zusätzliche Bereitstellung kann nur das aktuelle oder ein späteres Artefakt bereitstellen. Wenn ich Build # 60 für eine bestimmte Aktion bereits hochgestuft habe, wird die Bereitstellung von # 59 erneut für die Bereitstellung von # 60 verwendet. Ich muss darüber reden, aber das ist wahrscheinlich gut, um alte Deploys zu vermeiden. – xeraa

+0

Es gibt eine neue (glaube ich) Möglichkeit im Kopienartefakt-Plugin, dass Sie die Build-Nummer und das gewünschte Artefakt von dieser Build-Nummer angeben können: –

+0

@xeraa: Haben Sie eine Lösung für dieses Problem gefunden? Ich stehe vor dem gleichen Problem. promoted build # 60 und dann versuchen, eine niedrigere Version zu promoten, fördert die letzte hochgestufte Version des Artefakts. – Sabya

0

Nebenbei können Sie finden, Workflow system macht es einfacher, diese Art von Pipeline-Logik anzupassen, ohne die Promoted Builds oder Copy Artifact Plugins überhaupt verwenden zu müssen.

Verwandte Themen