100 votes

Jenkins n'exécute pas les tâches (en attente - en attente du prochain exécuteur)

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?

5voto

Craig Thomas Points 79

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 :

  • Supprimer la ressource externe
    (voir Jenkins -> Gérer Jenkins -> Gérer les nœuds -> maître -> configurer)
  • Redémarrer Jenkins
  • Recréer la ressource externe

0 votes

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!

5voto

Claudiu Points 323

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.

0 votes

J'ai dû désactiver le plugin Authorize Project dans la version 2.367 pour le faire fonctionner à nouveau.

4voto

Nick Constantine Points 334

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.

2voto

mdabdullah Points 511

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.

2voto

Noumenon Points 252

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

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.

Powered by:

X