2017-07-24 4 views
0

das Unternehmen, in dem ich arbeite ist jenkins 2,71, insbesondere der Pipeline und blaue Ozean Plugins zu bewerten. Wir haben auch GoCD getestet und wir benötigen, wie in GoCD, eine Möglichkeit für eine Pipeline automatisch die Artefakte von 2 anderen Pipelines zu holen (wobei das letzte erfolgreiche Ergebnis von jedem von ihnen), hier unser Fall.Pipeline zu verwenden Artefakte aus zwei Projekten, die von den gleichen git branch Namen verbunden

Wir haben diese ersten Pipelines (Build & Lauf-Tests), die zwei Projekte reflektieren:

  • Frontend, ~ 15 Minuten
  • Backend, ~ 10 Minuten

Ich erstellte eine Pipeline namens konfigurieren (~ 1 Minute), mit z ein Parameter namens Kundenname, der Backend- und Frontend-Dateien aufnimmt und zusammenfügt, dann spezifische kundenspezifische Konfigurationen und Anpassungen anwendet und einsetzbare Artefakte erzeugt. Anstelle von "Kundenname" könnte ich diesen Job auch parallelisieren, um alle Artefakte für jeden Kunden auf einmal in verschiedenen Verzeichnissen zu erstellen.

Die nächste Pipeline wäre, sie auf verschiedenen Testservern für jeden Kunden getrennt bereitzustellen. Dies könnte auch Teil derselben configure Pipeline sein, müssen wir noch sehen, wie Dinge zusammen in jenkins ...

Idealerweise muss ich configure Pipeline automatisch ausgelöst werden (oder auch auf Anfrage) Nach jedem Frontend oder Backend-Erfolg und als Eingabe die letzten erfolgreichen Artefakte aus diesen 2 Pipelines nehmen, aber nicht nur den letzten erfolgreichen Build, benötigen wir als Abhängigkeit den git-Zweignamen.

z. wir haben:

Backend-Filialen:

  • Master
  • release/2017,2

Frontend Braches:

  • Master
  • release/2017,2

In der Pipeline-Editor, fand ich eine Build- Option Trigger und es wie folgt festgelegt: Erstellen Sie nach anderen Projekten>Projekte gebaut werden zu sehen: Frontend, Backend> Überprüfen -Trigger nur, wenn Build stabil ist oder besser in meiner Testumgebung voller Fehler Trigger auch wenn der Build instabil ist.

weitere Suche, fand ich Copy Artifact Plugin

Aber jetzt ist die große Frage, , wie die letzten erfolgreichen Artefakte aus diesen Pipelines mit dem gleichen git branch Namen holen?

Weil wir z.B. ein Backend-Build von "release/2017.2" mit Frontend "master", muss als der letzte erfolgreiche Build die gleiche Beziehung oder den gleichen Parameter finden, oder wie auch immer man es nennen möchte, in unserem Fall ist die Assoziation der Name des Git-Zweigs.

Ist es möglich, dies zu erreichen? Wenn ja, wie?

Das Kopie-Artefakt-Plugin scheint in einem Freestyle-Projekt zu funktionieren. Würde es in einer Pipeline funktionieren? Das ist auch ein Anliegen ...

Dank

+0

Ja, das kann gemacht werden. Ich werde versuchen, eine ausführlichere Antwort zu geben, wenn ich mehr Zeit habe, aber werfen Sie einen Blick auf die 'copyArtifact'-Funktion. Außerdem gibt es einen Pipelinesyntax-Link in der linken Navigationsleiste, wenn Sie sich in einem Pipeline-Projekt befinden (Sie müssen vielleicht schon auf der Konfigurationsseite sein, ich kann mich nicht erinnern), die Details beschreibt, wie man viele dieser Arten macht von Sachen. – Kdawg

Antwort

0

Ja, das Copy Artifact Plugin funktioniert in beiden Freestyle und Pipeline-Projekte; Pipeline verwendet die copyArtifact-Funktion, auf die ich in meinem Kommentar verwiesen habe. Beachten Sie Folgendes: Wenn Sie den Link Pipeline-Syntax aufrufen, ist er etwas versteckt: Sie müssen zuerst "step: General Build Step" aus der Dropdown-Liste auswählen, dann erhalten Sie den Builder für Copy Artifact pipeline command.

Ich gehe davon aus, dass Ihre Projekte frontend und backend als Multi-Branch-Pipelines erstellt werden, da dies wahrscheinlich am einfachsten zu verwalten ist, damit Sie nicht für jedes Release neue Projekte erstellen müssen. Sie können diese Projekte von anderen Projekten referenzieren, indem Sie auf <project name>/<branch name> verweisen (manchmal musste ich die / durch %2f ersetzen, stattdessen denke ich meistens an Freestyle-Projekte). Sie könnten dann Ihr configure Projekt als parametrisierten Build (entweder Pipeline oder Freestyle) einrichten, sagen wir mit einem String-Parameter von PROJECT_BRANCH_NAME. Dann legen Sie im folgenden in Ihrer Frontend/Backend-Projektpipeline Skripte einen Build Ihres configure Projekt auslösen

build job: 'configure', parameters: [[$class: 'StringParameterValue', name: 'PROJECT_BRANCH_NAME', value: ${env.BRANCH_NAME}]]

Dann sollten Sie nur in der Lage sein, ihr configure Projekt verweist die frontend/%PROJECT_BRANCH_NAME% und backend/%PROJECT_BRANCH_NAME% (oder ${env.PROJECT_BRANCH_NAME} in ein Pipelineskript) beim Kopieren der Artefakte.

Gibt es auch einen bestimmten Grund, warum Sie speziell Jenkins 2.7 bewerten? 2.7 ist jetzt ein Jahr alt, und seitdem gab es ein paar neue LTS-Veröffentlichungen. Ich würde empfehlen, auf dem neuesten Stand zu bleiben, es sei denn, du weißt, dass es einen bestimmten Grund gibt, warum du 2.7 willst.

+0

Danke, ich werde das morgen bei der Arbeit ausprobieren! Über Jenkins Version, ich verwechselte es, ich bin zu SEMVER gewöhnt, so dachte ich, es war 2.7.0, aber es war ** 2.70 **, ich habe es vor einer Woche heruntergeladen, bereits auf 2.71 aktualisiert heute :) Ich habe auch bearbeitet die Frage, um Verwirrung zu vermeiden ... und ja, wir werden wahrscheinlich eine Jenkins-Datei in das Frontend und eine in das Backend-Repo setzen. – firepol

+0

Ihre Antwort hat mir sehr geholfen, DANKE. Ich musste mich nur ein wenig mit Entweichen/Verschlüsseln von Problemen und Variablennamen herumschlagen ... z. Ich musste 'value: env.BRANCH_NAME' verwenden (anstelle von * $ {env.BRANCH_NAME} *, nein * $ {} *). Auch ich musste eine zusätzliche Variable erstellen: 'def Branchname =" $ {PROJECT_BRANCH_NAME} ". Replace ("/","% 2f ")' weil es nicht richtig von der Upstream-Pipeline übergeben wurde. Es scheint ein bekanntes Problem zu sein ... Auch im copyArtifact-Schritt musste ich verwenden: 'projectName:" frontend/$ {Branchname} "' (anstelle von * frontend /% PROJECT_BRANCH_NAME% * - * %% * don ' t Arbeit) – firepol

+0

Kdawg: Ich habe eine neue Frage zu diesem Setup, vielleicht können Sie mir auch dort helfen? https://stackoverflow.com/questions/45377411/jenkins-copyartifact – firepol

Verwandte Themen