227 votes

Comment arrêter un job zombie inarrêtable sur Jenkins sans redémarrer le serveur ?

Notre serveur Jenkins a un travail qui est en cours d'exécution depuis trois jours, mais qui ne fait rien. Cliquer sur le petit X dans le coin ne fait rien, et le journal de sortie de la console n'indique rien non plus. J'ai vérifié sur nos serveurs de construction et la tâche ne semble pas s'exécuter du tout.

Existe-t-il un moyen de dire à Jenkins que le travail est "terminé", en éditant un fichier, un verrou ou autre ? Comme nous avons beaucoup de tâches, nous ne voulons pas vraiment redémarrer le serveur.

308voto

Alexandru Bantiuc Points 2997

J'ai également eu le même problème et je l'ai résolu via la console Jenkins.

Allez dans "Manage Jenkins" > "script Console" et exécutez un script :

 Jenkins .instance.getItemByFullName("JobName")
        .getBuildByNumber(JobNumber)
        .finish(hudson.model.Result.ABORTED, new java.io.IOException("Aborting build")); 

Vous n'aurez qu'à spécifier votre nom de poste et votre numéro de poste.

275voto

Greenish Points 137

Allez dans "Manage Jenkins" > "script Console" pour exécuter un script sur votre serveur afin d'interrompre le fil suspendu.

Vous pouvez obtenir tous les fils en direct avec Thread.getAllStackTraces() et interrompre celui qui est suspendu.

Thread.getAllStackTraces().keySet().each() {
  t -> if (t.getName()=="YOUR THREAD NAME" ) {   t.interrupt();  }
}

UPDATE :

La solution ci-dessus utilisant les threads peut ne pas fonctionner sur les versions plus récentes de Jenkins. Pour interrompre les pipelines gelés, reportez-vous à ce solution (par alexandru-bantiuc ) à la place et exécuter :

Jenkins.instance.getItemByFullName("JobName")
                .getBuildByNumber(JobNumber)
                .finish(
                        hudson.model.Result.ABORTED,
                        new java.io.IOException("Aborting build")
                );

57voto

Markus Schulte Points 1397

Au cas où vous auriez Pipeline multibranche -job (et que vous êtes un administrateur Jenkins), utilisez dans le fichier Jenkins script Console ce script :

Jenkins.instance
.getItemByFullName("<JOB NAME>")
.getBranch("<BRANCH NAME>")
.getBuildByNumber(<BUILD NUMBER>)
.finish(hudson.model.Result.ABORTED, new java.io.IOException("Aborting build"));

De https://issues.jenkins-ci.org/browse/JENKINS-43020

Si vous n'êtes pas sûr du nom complet (chemin) de la tâche, vous pouvez utiliser l'extrait suivant pour lister le nom complet de tous les éléments :

  Jenkins.instance.getAllItems(AbstractItem.class).each {
    println(it.fullName)
  };

De https://support.cloudbees.com/hc/en-us/articles/226941767-Groovy-to-list-all-jobs

44voto

Dibakar Aditya Points 354

Sans avoir à utiliser la console script ou des plugins supplémentaires, vous pouvez simplement interrompre une construction en entrant /stop , /term o /kill après l'URL de construction dans votre navigateur.

Je cite textuellement le lien ci-dessus :

Les travaux du pipeline peuvent être arrêtés en envoyant une requête HTTP POST à l'URL d'un build.

  • <Identification du bâtiment URL>/stop - interrompt un pipeline.
  • <Identification du bâtiment URL>/term - met fin de manière forcée à une construction (ne doit être utilisé que si stop ne fonctionne pas.
  • <ID DU BÂTIMENT URL>/kill - difficile de tuer un pipeline. C'est le moyen le plus destructeur d'arrêter un pipeline et il ne doit être utilisé qu'en dernier recours. dernier recours.

31voto

funql.org Points 348

La première solution proposée est assez proche. Si vous utilisez stop() au lieu d'interrupt(), cela tue même les threads runaway, qui tournent sans fin dans un système groovy script. Cela tuera toute construction, qui s'exécute pour un travail. Voici le code :

Thread.getAllStackTraces().keySet().each() {
    if (it.name.contains('YOUR JOBNAME')) {  
      println "Stopping $it.name"
      it.stop()
    }
}

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