Come riavviare Jenkins in sicurezza?


19

Devo apportare alcune modifiche alla configurazione sulla nostra istanza di Jenkins che comporterà il riavvio di Jenkins un paio di volte. Tuttavia, i nostri sviluppatori si impegnano abbastanza frequentemente da non vedere Jenkins senza lavoro in esecuzione da tre giorni.

Esiste un modo nativo (tramite la GUI o la riga di comando) per riavviare Jenkins in modo sicuro? IE: attendere che i lavori correnti finiscano prima di andare giù e tenere traccia dei lavori in coda per iniziare una volta che Jenkins ritorna su.

So che c'è un plugin ma per installarlo devo riavviare Jenkins ...


Indovina dalla cima della mia testa, ma disabilitare gli schiavi non è un'opzione? (per quanto ricordo non interrompe i lavori in corso ma impedisce l'avvio di ulteriori lavori in coda)
Tensibai

In teoria, con un'istanza Jenkins correttamente configurata che esegue lavori Pipeline, è possibile riavviare i nodi master o slave ogni volta che lo si desidera. La mia esperienza dice diversamente, comunque.
Jayhendren,

Risposte:


14

Se navighi verso di $YOUR_JENKINS_URL/updateCenter/te dovresti vedere la seguente pagina:

Qui puoi verificare Restart Jenkins when installation is complete and no jobs are runningquali dovrebbero essere abbastanza sicuri.


Comprendo che il riavvio si verifica solo se i plug-in sono in fase di installazione ... non è possibile forzare il riavvio senza installare plug-in, vero?
Alex

1
@Alex L'ho appena provato sulla mia istanza e per me sembra funzionare sempre, indipendentemente dall'installazione del plugin. Secondo stackoverflow.com/a/8077830 ci dovrebbe essere anche un /safeRestarte /restartendpoint.
eyalzek,

1
Ma non è la domanda sul riavvio mentre i lavori sono in esecuzione?
Dan Cornilescu,

@DanCornilescu afferma la domanda: IE: wait for current jobs to finish before going down, and keep track of queued jobs to start once Jenkins comes back up.questo è esattamente ciò che accade quando si seleziona quella casella.
eyalzek,

Stavo ponendo come afferma anche la domanda, il Jenkins without jobs running in three daysche significa che ci sarà un impatto poiché alcuni lavori saranno ritardati. Ma comunque, meglio che perdere lavoro.
Dan Cornilescu, il


8

È possibile eseguire il comando safeRestart utilizzando l'API Jenkins Rest ( [jenkins_url] / safeRestart ) oppure è possibile eseguire il comando tramite l' interfaccia della riga di comando Jenkins .

sudo /etc/init.d/jenkins safeRestart

Esecuzione di un comando CLI

La sintassi generale è la seguente (il design è simile a strumenti come svn / git):

java -jar jenkins-cli.jar [-s JENKINS_URL] comando [opzioni ...] [argomenti ...]

JENKINS_URL può essere specificato tramite la variabile di ambiente $ JENKINS_URL. Questa variabile di ambiente viene impostata automaticamente quando Jenkins esegue il fork di un processo durante le build, il che consente di utilizzare l'interfaccia della riga di comando di Jenkins dall'interno della build senza configurare esplicitamente l'URL.

NOTA: quando si esegue il comando safeRestart, tutti i lavori impostati per essere eseguiti durante il riavvio verranno messi in coda ed eseguiti quando il server è di nuovo online. Assicurarsi che ciò non provochi conflitti al riavvio!


1

Penso che questo sia un vero problema che molti stanno cercando di risolvere. Ci sono momenti in cui è preferibile riavviare Jenkins al momento dell'installazione del plugin. Uno dei suggerimenti che posso fornire in base alla mia esperienza è di:

  • Limitare l'accesso al modulo di amministrazione in modo che non tutti gli sviluppatori possano installare plug-in
  • Informare gli sviluppatori sui tempi di inattività e informarli in anticipo
  • Installa tutti i plugin richiesti in blocco e riavvia Jenkins
  • Informare gli sviluppatori che Jenkins è pronto per l'uso

Capisco che ciò richiede uno sforzo manuale e un coordinamento. Ma questo ha funzionato fino ad ora molto bene nel nostro progetto, non ho pensato a nulla di male nel menzionarlo.


1

Per riavviare Jenkins manualmente, puoi usare uno dei seguenti comandi (inserendo il loro URL in un browser):

(jenkins_url)/safeRestart- Consente il completamento di tutti i processi in esecuzione. I nuovi lavori rimarranno nella coda per essere eseguiti al termine del riavvio.

(jenkins_url)/restart - Forza un riavvio senza attendere il completamento delle build.


0

La visita di " https: // jenkins / safeRestart " non attende il completamento completo di "jobs / builds" in caso di lavori di pipeline.

Sembra aspettare che i passaggi finiscano ed eseguano il riavvio di jenkins e riprenda la pipeline dopo che jenkins è tornato.


1
Immagino che questo significhi un commento alla risposta di @Nakilon?
hagello,

0

Jenkins è progettato per non essere influenzato dai riavvii. Dalla mia esperienza, è possibile che una build potrebbe non riuscire a causa di un riavvio, ma sono rari.

Dove lavoro, dovevamo riavviare Jenkins regolarmente. Abbiamo ogni tipo di lavoro che puoi immaginare, alcuni piccoli, altri enormi. Solo una volta abbiamo visto un fallimento della build in cui un sottaceto non veniva reidratato.

Dopodiché, eseguiamo sempre riavvii sicuri ora.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.