jenkins kontinuierliche Lieferung mit gemeinsamem Arbeitsbereich

7

Hintergrund:

Wir haben einen Job bei Jenkins ( Production ), um jede Nacht ein Ergebnis zu erstellen. Wir haben einen anderen Job ( ProductionPush ), der das Ergebnis über ein proprietäres Protokoll am nächsten Tag an die Produktionsmaschinen weiterleitet. Dies liegt daran, dass einige Produktionsmaschinen nur während bestimmter Stunden am Tag verfügbar sind (es gibt uns auch die Möglichkeit, Build Breaks in letzter Minute zu beheben). ProductionPush benötigt Zugriff auf die über den Job Production erstellte Lieferung (benötigt also Zugriff auf denselben Arbeitsbereich). Wir haben mehrere Knoten und gleichzeitige Builds (und damit unvorhersehbare Arbeitsbereiche) und ziehen es vor, die Jobs nicht an einen festen Knoten / Arbeitsbereich zu binden, da die Ressourcen begrenzt sind.

Fragen:

  1. So stellen Sie sicher, dass beide Jobs den gleichen Arbeitsbereich verwenden und sicherstellen, dass ProductionPush zu einem festen Zeitpunkt am nächsten Tag ausgeführt wird, wenn Production erfolgreich ist - ohne dass beide Jobs vom selben Knoten ausgehen / Arbeitsplatz? Ich weiß, dass das parametrisierte Trigger-Plugin mit einigen davon helfen könnte, aber es scheint nicht so zu sein haben Zeitverzögerung Fähigkeit und 12 Stunden scheint zu lang für eine ruhige Zeit.

  2. Ist das Teilen des Arbeitsbereichs eine schlechte Idee?

user2120303 28.02.2013, 16:26
quelle

2 Antworten

25

Antwort 2: Ja, das Teilen des Arbeitsbereichs ist eine schlechte Idee. Es besteht die Möglichkeit von Dateisperren. Es gibt das Problem, dass der Arbeitsbereich gelöscht wird. Tu es einfach nicht ...

Antwort 1: Sie müssen die Artefakte des Builds archivieren . Auf diese Weise werden die Artefakte für einen bestimmten Build (nach Build-Nummer) immer verfügbar sein, unabhängig davon, ob ein anderer Build ausgeführt wird oder nicht, oder welchen Status die Arbeitsbereiche in

haben

Um die Artefakte zu archivieren

  • Wählen Sie in Ihrem build Job unter Post-Build-Aktionen die Option Artefakte archivieren aus
  • Geben Sie an, welche Artefakte archiviert werden sollen (Sie können eine der folgenden Kombinationen verwenden)
    a) Sie können alle archivieren: *.*
    b) Sie können eine bestimmte Datei mit Platzhaltern archivieren: /path/to/file_version*.zip
    c) Sie können die Zwischenverzeichnisse wie folgt ignorieren: **/file_version*.zip
  • Um Speicherprobleme mit vielen Artefakten zu vermeiden, können Sie oben auf der Konfiguration Alte Builds verwerfen auswählen, auf Erweitert klicken und mit Tage bis herumspielen Behalte Artefakte und Max # Builds, um Artefakte zu erhalten . Beachten Sie, dass diese beiden Einstellungen nicht steuern, wie lange die tatsächlichen Builds beibehalten werden (andere Einstellungen steuern das).

Zugriff auf Artefakte von Jenkins

  • Wählen Sie im Build-Verlauf einen beliebigen früheren Build aus.
  • Zusätzlich zu SCM-Änderungen und Revisionsdaten haben Sie jetzt einen Link Build Artifacts , unter dem Sie alle Artefakte für diesen bestimmten Build finden.
  • Sie können auch mit Jenkins 'Permalinks darauf zugreifen, zum Beispiel
    http://JENKINS_URL/job/JOB_NAME/lastSuccessfulBuild/artifact/ und dann den Namen des Artefakts.

Zugriff auf Artefakte von einem anderen Job

Ich habe ausführlich erklärt, wie Sie hier auf frühere Artefakte von einem anderen deploy Job (in Ihrem Beispiel ProductionPush ) zugreifen können:
Wie eine bestimmte Build-Nummer von einem anderen Job in Jenkins fördern?

Wenn Ihre Anforderungen die neueste Version immer in Production bereitstellen sollen, können Sie die Konfiguration von Aktion im obigen Link überspringen. Befolgen Sie einfach die Schritte zur Konfiguration des deploy Jobs. Wenn der Job deploy einmal ausgeführt wird, konfigurieren Sie einfach die Parameter Build periodic . Alternativ können Sie einen weiteren Job haben, der den Job deploy basierend auf den von Ihnen gewünschten Bedingungen auslöst.

Wenn Ihr Standard-Selektor wie oben im Link angegeben auf Letzter erfolgreicher Build gesetzt ist, wird der neueste Build in beiden Fällen nach Production     

Slav 04.03.2013, 18:46
quelle
0

Nicht sicher Archivartefakte ist wirklich eine gute Idee. Ein Staging-Repository ist möglicherweise besser, da es funktionsübergreifenden Teams ermöglicht, Artefakte in verschiedenen Builds zu teilen, wenn dies erforderlich ist, indem Sie die Maven-Datei settings.xml optimieren.

Sie möchten wirklich ein bereitstellbares (ear / war) als die Sache, die gebaut, getestet und dann zur Produktion befördert wird, sobald das Vertrauen mit dem Build hoch ist.

Verwenden Sie eine Build-Nummer auf Ihrem Deployable (major.minor.buildnumber). Dies ist die Sache, die Sie zur Produktion fördern, vorausgesetzt, Ihre Tests sind zuverlässig. Verwenden Sie keinen Bindestrich, um Moll mit der Build-Nummer zu trennen, da dies Maven zwingt, einen lexikalischen Vergleich durchzuführen ... ein Dezimalpunkt wird einen numerischen Vergleich erzwingen, der Ihnen weit weniger Kopfschmerzen bereitet.

Sie haben auch Ihre Zielplattform nicht erwähnt, aber mit dem Maven APT / RPM-Plugin, um eine APT / RPM zu einem APT / YUM-Repo zu schieben, das für eine Produktionskiste verfügbar ist (nach erfolgreichem Test!) wäre eine gute Sache passen, wie Industriestandards?

    
user924272 30.03.2014 00:09
quelle