Comment redémarrer en toute sécurité Jenkins?


19

J'ai besoin de faire quelques changements de configuration sur notre instance Jenkins qui impliqueront de redémarrer Jenkins plusieurs fois. Cependant, nos développeurs s'engagent suffisamment fréquemment pour que je n'aie pas vu Jenkins sans travaux en cours depuis trois jours.

Existe-t-il un moyen natif (via l'interface graphique ou via la ligne de commande) de redémarrer en toute sécurité Jenkins? IE: attendez que les travaux en cours se terminent avant de s'arrêter, et gardez une trace des travaux en file d'attente pour démarrer une fois que Jenkins revient.

Je sais qu'il y a un plugin mais pour l'installer j'ai besoin de redémarrer Jenkins ...


Devinez du haut de ma tête, mais la désactivation des esclaves n'est-elle pas une option? (pour autant que je m'en souvienne, cela n'arrête pas les travaux en cours mais empêche le lancement d'autres travaux dans la file d'attente)
Tensibai

En théorie, avec une instance Jenkins correctement configurée exécutant des travaux Pipeline, vous pouvez redémarrer les nœuds maître ou esclave à tout moment. Mon expérience dit cependant le contraire.
jayhendren

Réponses:


14

Si vous accédez à, $YOUR_JENKINS_URL/updateCenter/vous devriez voir la page suivante:

Ici, vous pouvez vérifier Restart Jenkins when installation is complete and no jobs are runningce qui devrait être assez sûr.


Je crois comprendre que le redémarrage ne se produit que si des plugins sont en cours d'installation ... il n'y a aucun moyen de forcer ce redémarrage à se produire sans installer de plugins, n'est-ce pas?
Alex

1
@Alex Je viens de le tester sur mon instance et pour moi, il semble toujours fonctionner, quelle que soit l'installation du plugin. Selon stackoverflow.com/a/8077830, il devrait également y avoir un /safeRestartet des /restartpoints de terminaison.
eyalzek

1
Mais la question n'est-elle pas de redémarrer pendant l'exécution des travaux?
Dan Cornilescu

@DanCornilescu la question dit:, IE: wait for current jobs to finish before going down, and keep track of queued jobs to start once Jenkins comes back up.c'est exactement ce qui se passe lorsque vous cochez cette case.
eyalzek

Je posais comme la question l'indique également Jenkins without jobs running in three days- ce qui signifie qu'il y aura un impact car certains emplois seront retardés. Mais encore mieux que de perdre des emplois.
Dan Cornilescu


8

Vous pouvez exécuter la commande safeRestart à l'aide de l'API Jenkins Rest ( [jenkins_url] / safeRestart ) ou vous pouvez exécuter la commande via la CLI Jenkins .

sudo /etc/init.d/jenkins safeRestart

Exécution d'une commande CLI

La syntaxe générale est la suivante (la conception est similaire à des outils comme svn / git):

java -jar jenkins-cli.jar [-s JENKINS_URL] commande [options ...] [arguments ...]

JENKINS_URL peut être spécifié via la variable d'environnement $ JENKINS_URL. Cette variable d'environnement est automatiquement définie lorsque Jenkins fork un processus pendant les builds, ce qui vous permet d'utiliser la CLI Jenkins depuis l'intérieur de la build sans configurer explicitement l'URL.

REMARQUE: lors de l'exécution de la commande safeRestart, tous les travaux définis pour être exécutés lors du redémarrage seront mis en file d'attente et exécutés lorsque le serveur sera de nouveau en ligne. Assurez-vous que cela ne provoque aucun conflit lors du redémarrage!


1

Je pense que c'est un vrai problème que beaucoup essaient de résoudre. Il y a des moments où il est préférable de redémarrer Jenkins lors de l'installation du plugin. L'une des suggestions que je peux faire sur la base de mon expérience est de:

  • Restreindre l'accès au module d'administration afin que tous les développeurs ne puissent pas installer de plugins
  • Informez les développeurs sur les temps d'arrêt et informez-les à l'avance
  • Installez tous les plugins requis en masse et redémarrez Jenkins
  • Informez les développeurs que Jenkins est prêt à l'emploi

Je comprends que cela nécessite un effort manuel et une coordination. Mais cela a si bien fonctionné jusqu'à présent dans notre projet, ne pense pas avoir de mal à le mentionner.


1

Pour redémarrer Jenkins manuellement, vous pouvez utiliser l'une des commandes suivantes (en entrant leur URL dans un navigateur):

(jenkins_url)/safeRestart- Permet à tous les travaux en cours d'exécution de se terminer. Les nouveaux travaux resteront dans la file d'attente pour s'exécuter une fois le redémarrage terminé.

(jenkins_url)/restart - Force un redémarrage sans attendre la fin des builds.


0

La visite de " https: // jenkins / safeRestart " n'attend pas que "jobs / builds" soit complètement terminé en cas de travaux de pipeline.

Il semble attendre la fin des étapes et effectuer un redémarrage jenkins et reprendre la ligne de force après que jenkins soit revenu.


1
Je suppose que cela se veut un commentaire à la réponse de @Nakilon?
hagello

0

Jenkins est conçu pour ne pas être affecté par les redémarrages. D'après mon expérience, il est possible qu'une build échoue en raison d'un redémarrage, mais ils sont rares.

Là où je travaille, nous devions redémarrer Jenkins régulièrement. Nous avons tous les types de travail que vous pouvez imaginer, certains petits, certains énormes. Une seule fois, nous avons vu une construction échouer où un cornichon n'était pas en cours de réhydratation.

Après cela, nous faisons toujours des redémarrages en toute sécurité maintenant.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.