Jenkins ne lancera aucun job. Après avoir consulté cette question, j'ai désactivé tous les nœuds esclaves mais même un simple job ne se lance pas sur le nœud principal.
Qu'est-ce qui ne va pas?
Jenkins ne lancera aucun job. Après avoir consulté cette question, j'ai désactivé tous les nœuds esclaves mais même un simple job ne se lance pas sur le nœud principal.
Qu'est-ce qui ne va pas?
Je suis un peu en retard, mais cela pourrait aider d'autres.
Dans mon cas, mon maître de Jenkins a une ressource externe partagée, qui est allouée aux tâches de Jenkins par le plugin external-resource-dispatcher. En raison du bogue JENKINS-19439 dans le plugin (qui est en version bêta), j'ai découvert que ma ressource avait été verrouillée par une tâche précédente, mais n'avait pas été déverrouillée lorsque cette tâche précédente a été annulée.
Pour savoir si une ressource est actuellement dans l'état verrouillé, accédez au nœud Jenkins affecté, Jenkins -> Gérer Jenkins -> Gérer les nœuds -> maître
Vous devriez voir l'état actuel de toutes les ressources externes. Si certaines sont verrouillées de manière inattendue, c'est peut-être la raison pour laquelle les tâches attendent un exécuteur.
Je n'ai pas trouvé de détails sur la façon de résoudre manuellement ce problème.
Redémarrer Jenkins n'a pas résolu le problème.
À la fin, j'ai opté pour l'approche brutale :
Si une construction est en attente en raison de Ressources non disponibles bloquées, vous pouvez libérer la contrainte en ignorant (temporairement) la disponibilité des ressources : Cliquez sur le travail "configurer" et décochez Confirmer la disponibilité des ressources avant la construction
. Une fois que vous avez enregistré, la construction démarrera!
Dans mon cas, je venais d'installer le plugin "Authorize Project" et j'avais incorrectement configuré la stratégie dans "Manage Jenkins -> Configure Global Security -> Access Control for Builds" comme "Exécuter en tant qu'anonyme". Donc, 'anonyme' n'avait pas le droit d'exécuter le job.
En configurant la première stratégie comme "Exécuter en tant qu'utilisateur ayant déclenché la construction", les jobs en attente ont été débloqués.
Dans mon cas, j'ai remarqué ce comportement lorsque la boîte était à court de mémoire (RAM) Je suis allé sur Jenkins -> Gérer Jenkins -> Gérer les nœuds et j'ai trouvé une exception de mémoire insuffisante. J'ai simplement libéré de la mémoire sur la machine et les travaux ont commencé à entrer dans les exécuteurs.
Réponse courte : Tuez tous les jobs qui s'exécutent sur le maître.
Dans mon cas, il y avait 3 jobs accrochés sur le maître depuis plus de 10 jours qui n'avaient pas été remarqués. En général, nous ne lançons aucun job directement sur le maître, tout est exécuté sur les esclaves. J'ai tué ces 3 jobs qui étaient accrochés, automatiquement les exécuteurs sur l'esclave ont commencé à prendre en charge les jobs.
Il est important de noter qu' même si nous avons 8 esclaves, seulement 1 esclave était dans cet état affecté.
[EDIT] Nous avons trouvé la réponse à pourquoi un seul esclave était dans cet état affecté. Lorsqu'un esclave Jenkins tombe en panne, tous les jobs en attente sont automatiquement transférés sur le maître. Les 3 jobs accrochés que j'ai tués provenaient de cet esclave, donc il est probable qu'il y ait un problème de connexion entre le maître et cet esclave en particulier.
J'avais juste ajouté une étape avec un agent docker. Comme je n'avais qu'un seul nœud, maître, j'ai dû dire au conteneur de réutiliser le nœud des étapes précédentes :
agent {
docker {
image 'bitnami/mongodb:latest'
reuseNode true
}
}
Vous pouvez voter pour que cela devienne le comportement par défaut des agents et empêcher ce type de blocage.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.