Wie starte ich Jenkins sicher neu?


19

Ich muss einige Konfigurationsänderungen an unserer Jenkins-Instanz vornehmen, bei denen Jenkins einige Male neu gestartet wird. Unsere Entwickler legen jedoch häufig genug fest, dass ich Jenkins nicht gesehen habe, ohne dass in drei Tagen Jobs ausgeführt wurden.

Gibt es eine native Möglichkeit (entweder über die GUI oder über die Befehlszeile), Jenkins sicher neu zu starten? IE: Warten Sie, bis die aktuellen Jobs beendet sind, bevor Sie herunterfahren, und verfolgen Sie die Jobs in der Warteschlange, um zu beginnen, sobald Jenkins wieder hochgefahren wird.

Ich weiß, dass es ein Plugin gibt, aber um es zu installieren, muss ich Jenkins neu starten ...


Vermutung von oben, aber ist das Deaktivieren der Slaves keine Option? (Soweit ich mich erinnere, werden die laufenden Jobs nicht gestoppt, sondern es werden keine weiteren Jobs in der Warteschlange gestartet)
Tensibai

Theoretisch können Sie mit einer ordnungsgemäß konfigurierten Jenkins-Instanz, in der Pipeline-Jobs ausgeführt werden, die Master- oder Slave-Knoten jederzeit neu starten. Meine Erfahrung sagt jedoch etwas anderes aus.
Jayhendren

Antworten:


14

Wenn Sie zu navigieren, $YOUR_JENKINS_URL/updateCenter/sollten Sie die folgende Seite sehen:

Hier können Sie überprüfen, Restart Jenkins when installation is complete and no jobs are runningwelche ziemlich sicher sein sollte.


Nach meinem Verständnis geschieht ein Neustart nur, wenn Plugins gerade installiert werden. Es gibt keine Möglichkeit, einen Neustart zu erzwingen, ohne Plugins zu installieren.
Alex

1
@Alex Ich habe es gerade auf meiner Instanz getestet und bei mir scheint es immer zu funktionieren, unabhängig von der Plugin-Installation. Laut stackoverflow.com/a/8077830 sollte es auch einen /safeRestartund /restartEndpunkte geben.
Eyalzek

1
Aber stellt sich nicht die Frage nach einem Neustart, während Jobs ausgeführt werden?
Dan Cornilescu

@DanCornilescu die Frage besagt: IE: wait for current jobs to finish before going down, and keep track of queued jobs to start once Jenkins comes back up.Dies ist genau das, was passiert, wenn Sie dieses Kontrollkästchen aktivieren .
Eyalzek

Ich habe gefragt, wie die Frage auch besagt Jenkins without jobs running in three days- was bedeutet, dass es Auswirkungen geben wird, da sich einige Jobs verzögern werden. Aber immer noch besser als Arbeitsplätze zu verlieren.
Dan Cornilescu


8

Sie können den Befehl safeRestart entweder mit der Jenkins Rest-API ( [jenkins_url] / safeRestart ) oder über die Jenkins-CLI ausführen .

sudo /etc/init.d/jenkins safeRestart

Ausführen eines CLI-Befehls

Die allgemeine Syntax lautet wie folgt (das Design ähnelt Tools wie svn / git):

java -jar jenkins-cli.jar [-s JENKINS_URL] Befehl [Optionen ...] [Argumente ...]

JENKINS_URL kann über die Umgebungsvariable $ JENKINS_URL angegeben werden. Diese Umgebungsvariable wird automatisch festgelegt, wenn Jenkins während des Builds einen Prozess ausgibt. Auf diese Weise können Sie die Jenkins-CLI innerhalb des Builds verwenden, ohne die URL explizit konfigurieren zu müssen.

ANMERKUNG: Wenn Sie den Befehl safeRestart ausführen, werden alle Jobs, die während des Neustarts ausgeführt werden sollen, in die Warteschlange gestellt und ausgeführt, wenn der Server wieder online ist. Stellen Sie sicher, dass dies beim Neustart keine Konflikte verursacht!


1

Ich denke, das ist ein echtes Problem, das viele zu lösen versuchen. Es gibt Situationen, in denen es vorzuziehen ist, Jenkins nach der Installation des Plugins neu zu starten. Einer der Vorschläge, die ich aufgrund meiner Erfahrungen machen kann, ist:

  • Beschränken Sie den Zugriff auf das Admin-Modul, damit nicht jeder Entwickler Plugins installieren kann
  • Weisen Sie die Entwickler in die Ausfallzeit ein und informieren Sie sie rechtzeitig
  • Installieren Sie alle erforderlichen Plugins in loser Schüttung und starten Sie Jenkins neu
  • Informieren Sie die Entwickler, dass Jenkins einsatzbereit ist

Ich verstehe, dass dies eine manuelle Anstrengung und Koordination erfordert. Aber das hat bisher in unserem Projekt so gut geklappt, dachte kein Schaden bei Erwähnung.


1

Um Jenkins manuell neu zu starten, können Sie einen der folgenden Befehle verwenden (indem Sie die URL in einem Browser eingeben):

(jenkins_url)/safeRestart- Ermöglicht das Abschließen aller ausgeführten Jobs. Neue Jobs bleiben in der Warteschlange, um ausgeführt zu werden, nachdem der Neustart abgeschlossen ist.

(jenkins_url)/restart - Erzwingt einen Neustart, ohne auf den Abschluss der Builds zu warten.


0

Das Aufrufen von " https: // jenkins / safeRestart " wartet nicht darauf, dass "jobs / builds" bei Pipeline-Jobs vollständig abgeschlossen sind.

Es scheint zu warten, bis die Schritte abgeschlossen sind und Jenkins neu gestartet und die Pipline wieder aufgenommen wurde, nachdem Jenkins wieder angezeigt wurde.


1
Ich denke, das ist als Kommentar zur Antwort von @Nakilon gedacht?
Hagello

0

Jenkins ist so konzipiert, dass es von Neustarts nicht betroffen ist. Aus meiner Erfahrung ist es möglich, dass ein Build aufgrund eines Neustarts fehlschlägt, dies ist jedoch selten.

Wo ich arbeite, mussten wir Jenkins regelmäßig neu starten. Wir haben jede Art von Arbeit, die Sie sich vorstellen können, einige kleine, einige große. Nur einmal haben wir gesehen, dass ein Build fehlgeschlagen ist, bei dem eine Gurke nicht rehydriert wurde.

Danach führen wir jetzt immer sichere Neustarts durch.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.