Notre serveur Jenkins a un travail en cours depuis trois jours, mais ne fait rien. Cliquer sur le petit X dans le coin ne fait rien, et le journal de sortie de la console n'affiche rien non plus. J'ai vérifié nos serveurs de build et le travail ne semble pas du tout en cours d'exécution.
Existe-t-il un moyen de dire à jenkins que le travail est "terminé", en éditant un fichier ou un verrou ou quelque chose? Comme nous avons beaucoup de travaux, nous ne voulons pas vraiment redémarrer le serveur.
Réponses:
Allez dans "Gérer Jenkins"> "Console de script" pour exécuter un script sur votre serveur pour interrompre le fil suspendu.
Vous pouvez obtenir tous les threads en direct avec
Thread.getAllStackTraces()
et interrompre celui qui est suspendu.METTRE À JOUR:
La solution ci-dessus utilisant des threads peut ne pas fonctionner sur les versions plus récentes de Jenkins. Pour interrompre les pipelines gelés, reportez-vous à cette solution (par alexandru-bantiuc ) et exécutez:
la source
t -> println(t.getName());
t.getName()=="SOME NAME"
?t.stop
place:Thread.getAllStackTraces().keySet().each() { t -> if (t.getName()=="YOUR THREAD NAME" ) { println(“Found, stopping now… “); t.stop(); } }
J'ai également eu le même problème et je l'ai résolu via Jenkins Console.
Allez dans «Gérer Jenkins»> «Console de script» et exécutez un script:
Vous aurez juste à spécifier votre JobName et JobNumber.
la source
Jenkins.instance.getItemByFullName("JobName").getBuildByNumber(JobNumber).delete();
Après avoir exécuté ceci et un autre redémarrage de Jenkins, la construction de zombie était enfin partie.finish
dans AbstractBuild ni FreeSyleBuild ni MavenModulesetBuildgroovy.lang.MissingMethodException: No signature of method: hudson.model.FreeStyleBuild.finish() is applicable for argument types: (hudson.model.Result, java.io.IOException) values: [ABORTED, java.io.IOException: Aborting build] Possible solutions: find(), findAll(), find(groovy.lang.Closure) at
Dans le cas où vous avez un travail de pipeline multibranch (et que vous êtes un administrateur Jenkins), utilisez ce script dans la console de script Jenkins :
Sur 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 de code suivant pour répertorier le nom complet de tous les éléments:
De https://support.cloudbees.com/hc/en-us/articles/226941767-Groovy-to-list-all-jobs
la source
J'utilise le plugin de surveillance pour cette tâche. Après l'installation du plugin
Recherchez le nom de la tâche bloquée
Le nom du fil commencera comme ceci
Executor #2 for master : executing <your-job-name> #<build-number>
Cliquez sur le bouton rond rouge à l'extrême droite dans le tableau de la ligne de la tâche souhaitée
la source
Une fois que j'ai rencontré une construction qui ne pouvait pas être arrêtée par la "console de script". Enfin, j'ai résolu le problème avec ces étapes:
la source
La première solution proposée est assez proche. Si vous utilisez stop () au lieu d'interruption (), cela tue même les threads emballés, qui s'exécutent à l'infini dans un script système groovy. Cela tuera toute construction exécutée pour un travail. Voici le code:
la source
contains
ici est incorrecte et dangereuse - si le nom de votre tâche est "Exécuter les tests", elle supprimera également toutes les tâches nommées "Exécuter les tests - Intégration", "Exécuter les tests - Unité", etc. Toute personne utilisant ceci devra faire attention à ne pas mettre fin de manière inattendue à des emplois indépendantsSans avoir à utiliser la console de script ou plugins supplémentaires, vous pouvez simplement faire avorter une construction en entrant
/stop
,/term
ou/kill
après l'URL de construction dans votre navigateur.Citant textuellement à partir du lien ci-dessus:
la source
Si vous avez un travail de pipeline imparable, essayez ce qui suit:
Jenkins se rendra compte que le travail doit être terminé et arrête la construction
la source
Le plugin Build-timeout peut être utile dans de tels cas. Cela supprimera automatiquement le travail si cela prend trop de temps.
la source
Je suppose qu'il est trop tard pour répondre mais mon aide à certaines personnes.
Je n'ai pas assez de réputation pour publier des images désolé.
J'espère que ça peut aider
la source
La meilleure réponse a presque fonctionné pour moi, mais j'avais un problème majeur: j'avais un très grand nombre (~ 100) de tâches zombies en raison d'un redémarrage de Jenkins particulièrement mal chronométré, donc trouver manuellement le nom du travail et le numéro de build de chacun et chaque travail de zombie, puis les tuer manuellement était irréalisable. Voici comment j'ai automatiquement trouvé et tué les emplois zombies:
Ce script effectue une boucle sur toutes les générations de tous les travaux et utilise
getResult().equals(null)
pour déterminer si le travail est terminé ou non. Une build qui est dans la file d'attente mais pas encore démarrée ne sera pas répétée (puisque cette build ne sera pas inclusejob.builds
), et une build qui est déjà terminée renverra autre chose quenull
forbuild.getResult()
. Une tâche en cours d'exécution légitime aura également un résultat de constructionnull
, alors assurez-vous que vous n'avez pas de tâches en cours d'exécution que vous ne voulez pas tuer avant de l'exécuter.Les multiples boucles imbriquées sont principalement nécessaires pour découvrir chaque branche / PR pour chaque référentiel dans un projet Multibranch Pipeline; si vous n'utilisez pas de pipelines multibranches, vous pouvez simplement parcourir tous vos travaux directement avec quelque chose comme
Jenkins.instance.getItems().each
.la source
runningBuilds = Jenkins.instance.getView('All').getBuilds().findAll() { it.getResult().equals(null) } runningBuilds.each { branch->branch.doKill() }
J'ai regardé la source Jenkins et il semble que ce que j'essaie de faire est impossible, car l'arrêt d'un travail semble se faire via une interruption de thread. Je n'ai aucune idée de la raison pour laquelle le travail est suspendu.
Éditer:
Raisons possibles des tâches imparables:
la source
J'utilise habituellement jenkins-cli dans de tels cas. Vous pouvez télécharger le pot à partir d'une page
http://your-jenkins-host:PORT/cli
. Puis coursInfos auxiliaires:
Vous pouvez également passer une gamme de builds comme
350:400
. Aide générale disponible en exécutantAide des commandes contextuelles pour
delete-builds
parla source
La réponse d'Alexandru Bantiuc a bien fonctionné pour que j'arrête la construction, mais mes exécuteurs testamentaires étaient toujours aussi occupés. J'ai pu effacer le statut de l'exécuteur occupé en utilisant ce qui suit
la source
Eu ce même problème mais il n'y avait pas de thread de pile. Nous avons supprimé le travail en utilisant cet extrait de code dans la console Jenkins. Remplacez jobname et buil dnumber par le vôtre.
la source
Récemment, je suis tombé sur un nœud / agent qui avait un exécuteur occupé pendant des jours par une construction "X" d'un travail de pipeline, bien que cette page d'emplois déclarée que la construction "X" n'existait plus (abandonnée après 10 versions suivantes (!), Comme configuré dans le travail de pipeline). Vérifié que sur le disque: la construction "X" était vraiment partie.
La solution: c'est l'agent / le nœud qui a signalé à tort que l'exécuteur occupé était occupé à exécuter la construction "X". L'interruption du thread de cet exécuteur l'a immédiatement libéré.
Autres réponses envisagées:
Thread.getAllStackTraces()
: aucun fil correspondant.getBuildByNumber()
: ne s'appliquaient pas car la construction n'était plus vraiment là!Mise à jour:
J'ai de nouveau vécu une situation similaire, où un exécuteur était occupé pendant des jours par une construction de pipeline terminée (toujours existante). Cet extrait de code était la seule solution fonctionnelle.
la source
J'ai eu le même problème au cours de la dernière demi-heure ...
Impossible de supprimer une version zombie exécutée dans mon pipeline multi-branches. Même le serveur redémarre par l'interface utilisateur ou même à partir de la ligne de commande via
sudo service jenkins restart
a bloqué l'exécution ... La construction n'était pas arrêtable ... Elle a toujours été récoltée.J'étais très ennuyé, mais ... en regardant dans le journal de la construction, j'ai trouvé quelque chose d'intéressant à la fin du journal:
Les parties marquées en rouge sont les "parties frustrantes" ... Comme vous pouvez le voir, j'ai toujours voulu abandonner la construction depuis l'interface utilisateur mais cela n'a pas fonctionné ...
Mais il y a un lien hypertexte avec du texte
Click here to forcibly terminate running steps
... (premier vert) Maintenant, j'ai appuyé sur le lien ...) Après l'exécution du lien, un message surStill paused
est apparu avec un autre lienClick here to forcibily kill entire build
(deuxième vert) Après avoir appuyé sur ce lien, la construction était finalement difficile tué...Cela semble donc fonctionner sans plugins spéciaux (à l'exception du plugin de construction multibranch-pipeline lui-même).
la source
tail
ou une visionneuse de journal pour obtenir le lien?<a href="#" onclick="new Ajax.Request('[server]/jenkins/job/[pipeline_name]/[job_number]/kill'); return false">Click here to forcibly kill entire build</a>
J'avais beaucoup de tâches zombi, j'ai donc utilisé le script suivant:
la source
Cela fonctionne pour moi à chaque fois:
Merci à funql.org
la source
J'ai eu le même problème deux fois maintenant, le seul canapé correct a été de redémarrer le serveur tomcat et de redémarrer la construction.
la source
Un utilitaire que j'ai écrit appelé jkillthread peut être utilisé pour arrêter n'importe quel thread dans n'importe quel processus Java, à condition que vous puissiez vous connecter à la machine exécutant le service sous le même compte.
la source
SOLUTION TRÈS SIMPLE
La raison pour laquelle je voyais ce problème était un
http
lien incorrect sur la page au lieu dehttps
cela devrait arrêter le travail. Tout ce que vous avez à faire est de modifier l'onclick
attribut dans la page html, en suivantonclick
attribut pour modifier sa valeurs
àhttp
avoirhttps
Utilisez une capture d'écran pour référence
la source
Utilisation de la console de script sur https: // my-jenkins / script
la source
Aucune de ces solutions n'a fonctionné pour moi. J'ai dû redémarrer la machine sur laquelle le serveur était installé. Le travail impossible à tuer est maintenant terminé.
la source
Vous pouvez simplement copier le travail et supprimer l'ancien. Si cela n'a pas d'importance que vous ayez perdu les anciens journaux de construction.
la source
Voici comment j'ai résolu ce problème dans la version
2.100
avec Blue Oceanssh
dans ma boîte Jenkinscd ~/.jenkins
(où je garde jenkins)cd job/<job_name>/branches/<problem_branch_name>/builds
rm -rf <build_number>
Après cela, vous pouvez éventuellement changer le nombre dans
nextBuildNumber
(j'ai fait ceci)Enfin, j'ai redémarré jenkins (
brew services restart jenkins
) Cette étape sera évidemment différente selon la façon dont vous gérez et installez Jenkins.la source
Entrez dans l'interface utilisateur blue-ocean. Essayez d'arrêter le travail à partir de là.
la source