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 ...

Alex
quelle
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.

eyalzek
quelle
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
15

Zu Besuch in https: // youjenkinsdomain / safeRestart wird es im Modus gesetzt , wenn es um Arbeitsplätze und neu gestartet werden dann zu stoppen wartet.

Nakilon
quelle
2
Ich musste diese spezielle Antwort verwenden, als unser Jenkins-Server fehlerhaft war und nicht neu gestartet werden konnte, als ein Plugin dies erforderte.
kayleeFrye_onDeck
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!

PrestonM
quelle
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.

Karthik Venkatesan
quelle
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.

Subhash
quelle
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.

Muhammad Faizan-Ul-Haq
quelle
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.

Gi0rgi0s
quelle