Ricarica Sicura delle Configurazioni di Jenkins Senza Necessità di Riavvio
Ricarica la configurazione di Jenkins dal disco in modo sicuro, scopri quando è meglio un riavvio sicuro ed evita scorciatoie rischiose nella Script Console.
Ricarica Sicura delle Configurazioni di Jenkins Senza Necessità di Riavvio
Ricarica la configurazione di Jenkins sembra innocuo finché non lo fai su un controller occupato e scopri che non tutte le modifiche possono essere applicate correttamente mentre i job sono in esecuzione. Il comando giusto dipende da cosa è cambiato.
Se hai modificato file XML in JENKINS_HOME, ripristinato job da backup o cambiato file al di fuori dell'interfaccia web, Jenkins può ricaricare la configurazione dal disco. Se hai installato o aggiornato plugin, modificato opzioni Java o hai bisogno di aggiornare lo stato runtime, un riavvio sicuro è solitamente lo strumento migliore. Sono operazioni diverse.
La scorciatoia fuorviante da evitare è System.exit(10) nella Script Console. Può far sì che un supervisore di processo, un contenitore servlet o un wrapper di servizio riavvi Jenkins a seconda di come è stato avviato, ma non è un comando pulito di "ricarica configurazione". Può interrompere il lavoro e nasconde l'intenzione. Usa invece la CLI di Jenkins o le azioni di gestione integrate.
Ricarica la configurazione dal disco con la CLI
Il comando più chiaro è reload-configuration:
java -jar jenkins-cli.jar -s "$JENKINS_URL" -auth "$JENKINS_USER:$JENKINS_API_TOKEN" reload-configuration
Questo dice a Jenkins di scartare la configurazione caricata e leggerla di nuovo dal disco. È utile dopo modifiche controllate ai file, come il ripristino di una configurazione di job o l'applicazione di configurazioni generate dall'automazione.
Prima di eseguirlo, controlla tre cose:
java -jar jenkins-cli.jar -s "$JENKINS_URL" -auth "$JENKINS_USER:$JENKINS_API_TOKEN" who-am-i
java -jar jenkins-cli.jar -s "$JENKINS_URL" -auth "$JENKINS_USER:$JENKINS_API_TOKEN" list-jobs >/dev/null
L'account necessita del permesso amministrativo per la ricarica della configurazione. Non utilizzare un token amministrativo personale dal laptop di qualcuno per l'automazione di routine. Usa un account amministrativo gestito, conserva il token in un archivio segreto e ruotalo secondo la tua policy.
Se preferisci l'interfaccia web, usa Gestisci Jenkins e l'opzione di ricarica quando disponibile nella tua versione di Jenkins e nei componenti installati. La CLI è più facile da verificare perché il comando può risiedere in un runbook.
Quando il riavvio sicuro è la scelta migliore
Un riavvio sicuro attende il completamento dei build in esecuzione e poi riavvia Jenkins. È più lento di una ricarica, ma è più onesto quando lo stato runtime deve essere ricostruito.
Usa il riavvio sicuro dopo l'installazione o l'aggiornamento di plugin, modifiche alle opzioni Java, aggiornamenti del core di Jenkins o comportamenti che appaiono solo dopo un riavvio completo del controller.
java -jar jenkins-cli.jar -s "$JENKINS_URL" -auth "$JENKINS_USER:$JENKINS_API_TOKEN" safe-restart
Puoi anche usare l'endpoint /safeRestart se il tuo ambiente lo permette, ma la forma CLI è più facile da standardizzare.
Non promettere zero downtime. Una ricarica può influenzare brevemente l'interfaccia utente, e un riavvio sicuro riavvia intenzionalmente il controller dopo che i build si sono svuotati. Se gli agenti si disconnettono o i plugin si comportano male, gli utenti potrebbero notarlo. Pianifica l'operazione quando il raggio d'esplosione è accettabile.
Un runbook di ricarica più sicuro
Prima, annuncia la finestra di manutenzione, anche se breve. Poi controlla cosa è in esecuzione:
java -jar jenkins-cli.jar -s "$JENKINS_URL" -auth "$JENKINS_USER:$JENKINS_API_TOKEN" list-jobs
Per un rapido controllo della coda, usa Groovy tramite CLI:
java -jar jenkins-cli.jar -s "$JENKINS_URL" -auth "$JENKINS_USER:$JENKINS_API_TOKEN" groovy = <<'EOF'
Jenkins.instance.queue.items.each { item ->
println "In coda: ${item.task.fullDisplayName}"
}
Jenkins.instance.computers.each { computer ->
computer.executors.findAll { it.isBusy() }.each { executor ->
println "In esecuzione su ${computer.displayName}: ${executor.currentExecutable}"
}
}
EOF
Esegui un backup della configurazione su cui stai per fare affidamento. Come minimo, abbi un backup recente di JENKINS_HOME, specialmente config.xml, le directory dei job, i metadati delle credenziali e lo stato dei plugin. Fai attenzione con i file delle credenziali; proteggi i backup come segreti.
Esegui la ricarica:
java -jar jenkins-cli.jar -s "$JENKINS_URL" -auth "$JENKINS_USER:$JENKINS_API_TOKEN" reload-configuration
Poi verifica che il controller risponda:
java -jar jenkins-cli.jar -s "$JENKINS_URL" -auth "$JENKINS_USER:$JENKINS_API_TOKEN" who-am-i
java -jar jenkins-cli.jar -s "$JENKINS_URL" -auth "$JENKINS_USER:$JENKINS_API_TOKEN" list-jobs >/dev/null
Controlla il log di sistema e un job rappresentativo prima di considerare il lavoro completato. Una ricarica che restituisce successo può comunque esporre un XML di job errato, un plugin mancante o un problema di permessi.
Sugli script Groovy di ricarica
La Script Console è potente perché viene eseguita all'interno del controller Jenkins. Questo è anche il motivo per cui merita cautela. Qualsiasi utente della console script può leggere segreti, modificare job, disabilitare controlli di sicurezza o rompere il controller.
Se hai bisogno di Groovy per ispezione, mantienilo in sola lettura e breve. Per esempio:
println Jenkins.instance.version
println Jenkins.instance.items.size()
println Jenkins.instance.queue.items.size()
Evita chiamate di ricarica interne non documentate a meno che non le abbia testate contro la tua versione di Jenkins e i plugin. Le API interne possono cambiare, e i metodi di ricarica specifici dei plugin potrebbero non ricaricare lo stato che ti interessa.
Per le configurazioni Infrastructure as Code, usa il meccanismo di ricarica documentato del plugin piuttosto che una ricarica generica di Jenkins. JCasC ha il proprio modello e comportamento di validazione, e un file di configurazione che sembra corretto su disco può comunque fallire quando viene applicato.
Cosa fare se la ricarica va male
Se Jenkins torna con job mancanti, viste rotte o errori di plugin, non continuare a cliccare ricarica. Cattura il log di sistema, annota l'ora e confronta i file modificati con il backup. Le cause comuni sono XML malformato, una configurazione di job che fa riferimento a un plugin non più installato o modifiche manuali fatte mentre Jenkins stava ancora scrivendo file.
Se l'interfaccia utente è instabile ma il processo è in esecuzione, un riavvio sicuro potrebbe cancellare lo stato transitorio. Se la configurazione è effettivamente errata, ripristina prima i file precedenti, poi ricarica o riavvia.
Il modello più sicuro è semplice: usa reload-configuration per modifiche alla configurazione su disco, usa safe-restart per modifiche runtime e plugin, e riserva la Script Console per script amministrativi deliberati che puoi spiegare riga per riga.