Nuestro servidor Jenkins tiene un trabajo que se ha estado ejecutando durante tres días, pero no está haciendo nada. Hacer clic en la pequeña X en la esquina no hace nada, y el registro de salida de la consola tampoco muestra nada. He revisado nuestros servidores de compilación y el trabajo no parece estar ejecutándose en absoluto.
¿Hay alguna manera de decirle a Jenkins que el trabajo está "hecho", editando algún archivo o bloqueo o algo así? Como tenemos muchos trabajos, realmente no queremos reiniciar el servidor.
Respuestas:
Vaya a "Manage Jenkins"> "Script Console" para ejecutar un script en su servidor para interrumpir el hilo colgante.
Puede obtener todos los hilos en vivo
Thread.getAllStackTraces()
e interrumpir el que está colgando.ACTUALIZAR:
La solución anterior que utiliza subprocesos puede no funcionar en las versiones más recientes de Jenkins. Para interrumpir las tuberías congeladas, consulte esta solución (por alexandru-bantiuc ) y ejecute:
fuente
t -> println(t.getName());
t.getName()=="SOME NAME"
?t.stop
lugar:Thread.getAllStackTraces().keySet().each() { t -> if (t.getName()=="YOUR THREAD NAME" ) { println(“Found, stopping now… “); t.stop(); } }
También tuve el mismo problema y lo solucioné a través de la consola Jenkins.
Vaya a "Administrar Jenkins"> "Consola de script" y ejecute un script:
Solo tendrá que especificar su JobName y JobNumber.
fuente
Jenkins.instance.getItemByFullName("JobName").getBuildByNumber(JobNumber).delete();
después de ejecutar esto y otro, jenkins reiniciar, la construcción zombie finalmente desapareció.finish
en 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
En caso de que tenga un trabajo Multibranch Pipeline (y usted es un administrador de Jenkins), use en la consola de Jenkins Script este script:
De https://issues.jenkins-ci.org/browse/JENKINS-43020
Si no está seguro de cuál es el nombre completo (ruta) del trabajo, puede usar el siguiente fragmento para enumerar el nombre completo de todos los elementos:
Desde https://support.cloudbees.com/hc/en-us/articles/226941767-Groovy-to-list-all-jobs
fuente
Yo uso el complemento de monitoreo para esta tarea. Después de la instalación del complemento
Busque el nombre del trabajo que está colgado
El nombre del hilo comenzará así
Executor #2 for master : executing <your-job-name> #<build-number>
Haga clic en el botón rojo redondo a la derecha de la tabla de la línea que tiene su trabajo deseado
fuente
Una vez encontré una versión que no podía ser detenida por la "Consola de Script" Finalmente resolví el problema con estos pasos:
fuente
La primera solución propuesta está bastante cerca. Si usa stop () en lugar de interrupt (), incluso mata los hilos fuera de control, que se ejecutan sin fin en un script de sistema maravilloso. Esto matará cualquier compilación que se ejecute para un trabajo. Aquí está el código:
fuente
contains
aquí es incorrecto y peligroso: si el nombre de su trabajo es "Ejecutar pruebas", también eliminará cualquier trabajo llamado "Ejecutar pruebas - Integración", "Ejecutar pruebas - Unidad", etc. Cualquier persona que use esto deberá tener cuidado de no hacerlo. terminar trabajos no relacionados inesperadamenteSin tener que utilizar la consola de comandos o plugins adicionales, simplemente puede abortar una acumulación mediante la introducción de
/stop
,/term
o/kill
después de la URL de construcción en su navegador.Citando textualmente desde el enlace de arriba:
fuente
Si tiene un trabajo de tubería imparable, intente lo siguiente:
Jenkins se dará cuenta de que el trabajo debe finalizar y detiene la compilación
fuente
El complemento Build-timeout puede ser útil para tales casos. Eliminará el trabajo automáticamente si tarda demasiado.
fuente
Supongo que es demasiado tarde para responder, pero ayudo a algunas personas.
No tengo suficiente reputación para publicar imágenes, lo siento.
Espero que pueda ayudar
fuente
La respuesta principal casi funcionó para mí, pero tuve un problema importante: tuve un número muy grande (~ 100) de trabajos de zombies debido a un reinicio de Jenkins particularmente mal programado, por lo que encontrar manualmente el nombre del trabajo y el número de compilación de cada uno y cada trabajo zombie y luego matarlos manualmente no era factible. Así es como encontré y maté automáticamente los trabajos de zombies:
Este script recorre todas las compilaciones de todos los trabajos y lo utiliza
getResult().equals(null)
para determinar si el trabajo ha finalizado o no. Una compilación que está en la cola pero que aún no se inició no se repetirá (ya que esa compilación no estará enjob.builds
), y una compilación que ya está terminada devolverá algo más quenull
parabuild.getResult()
. Un trabajo en ejecución legítimo también tendrá un resultado de compilaciónnull
, así que asegúrese de no tener trabajos en ejecución que no desee eliminar antes de ejecutar esto.Los múltiples bucles anidados son principalmente necesarios para descubrir cada rama / PR para cada repositorio en un proyecto de tubería multibranch; Si no está utilizando tuberías de múltiples ramas, simplemente puede recorrer todos sus trabajos directamente con algo como
Jenkins.instance.getItems().each
.fuente
runningBuilds = Jenkins.instance.getView('All').getBuilds().findAll() { it.getResult().equals(null) } runningBuilds.each { branch->branch.doKill() }
Miré la fuente de Jenkins y parece que lo que estoy tratando de hacer es imposible, porque la detención de un trabajo parece hacerse a través de una interrupción de Thread. Sin embargo, no tengo idea de por qué el trabajo está colgando ...
Editar:
Posibles razones para trabajos imparables:
fuente
Usualmente uso jenkins-cli en tales casos. Puedes descargar el jar desde una página
http://your-jenkins-host:PORT/cli
. Entonces correInformación auxiliar:
También puede pasar una variedad de compilaciones como
350:400
. Ayuda general disponible ejecutandoAyuda de comando de contexto para
delete-builds
porfuente
La respuesta de Alexandru Bantiuc funcionó bien para que detuviera la construcción, pero mis ejecutores seguían apareciendo ocupados. Pude borrar el estado de ejecutor ocupado usando lo siguiente
fuente
Tuve este mismo problema pero no había hilo de pila. Eliminamos el trabajo usando este fragmento en la consola de Jenkins. Reemplace el nombre del trabajo y construya el número con el suyo.
fuente
Recientemente me encontré con un nodo / agente que tenía un ejecutor ocupado durante días por una compilación "X" de un trabajo de canalización, aunque esa página de trabajos afirmaba que la compilación "X" ya no existía (descartada después de 10 compilaciones posteriores (!), Como configurado en el trabajo de canalización). Verificó eso en el disco: la compilación "X" realmente había desaparecido.
La solución: fue el agente / nodo el que informó erróneamente que el ejecutor ocupado estaba ocupado ejecutando la compilación "X". Interrumpir el hilo de ese ejecutor lo ha liberado inmediatamente.
Otras respuestas consideradas:
Thread.getAllStackTraces()
: sin hilo coincidente.getBuildByNumber()
: no se aplicaron ya que la compilación ya no estaba allí.Actualización:
Experimenté nuevamente una situación similar, donde un Ejecutor estuvo ocupado durante días por una construcción de tubería terminada (aún existente). Este fragmento de código fue la única solución de trabajo.
fuente
Tuve el mismo problema en la última media hora ...
No pude eliminar una construcción zombie que se ejecuta en mi canalización de varias sucursales. Incluso el servidor se reinicia por la interfaz de usuario o incluso desde la línea de comandos a través de
sudo service jenkins restart
bloquear la ejecución ... La compilación no se podía detener ... Siempre reapareció.Estaba muy molesto, pero ... al mirar el registro de la construcción, encontré algo interesante al final del registro:
Las partes marcadas en rojo son las "partes frustrantes" ... Como puede ver, siempre quise Abortar la construcción desde la interfaz de usuario, pero no funcionó ...
Pero hay un hipervínculo con texto
Click here to forcibly terminate running steps
... (primero verde) Ahora presioné el enlace ...) Después de la ejecución del enlace,Still paused
apareció un mensaje sobre otro enlaceClick here to forcibily kill entire build
(segundo verde) Después de presionar este enlace también la construcción finalmente fue difícil delicado...Entonces, esto parece funcionar sin ningún complemento especial (excepto el complemento de compilación multibranch-pipeline).
fuente
tail
o un visor de registros para obtener el enlace?<a href="#" onclick="new Ajax.Request('[server]/jenkins/job/[pipeline_name]/[job_number]/kill'); return false">Click here to forcibly kill entire build</a>
Tenía muchos trabajos de zombis, así que usé el siguiente script:
fuente
Esto funciona para mí cada vez:
Gracias a funql.org
fuente
Me ha sucedido el mismo problema dos veces, la única solución ha sido reiniciar el servidor Tomcat y reiniciar la compilación.
fuente
Una utilidad que escribí llamada jkillthread se puede usar para detener cualquier subproceso en cualquier proceso de Java, siempre que pueda iniciar sesión en la máquina que ejecuta el servicio con la misma cuenta.
fuente
SOLUCION MUY SIMPLE
La razón por la que veía este problema era un
http
enlace incorrecto en la página, en lugar dehttps
eso debería detener el trabajo. Todo lo que necesita hacer es editar elonclick
atributo en la página html, siguiendoonclick
atributo para editar su valor.s
ahttp
tenerhttps
Use la captura de pantalla como referencia
fuente
Usando la consola de Script en https: // my-jenkins / script
fuente
Ninguna de estas soluciones funcionó para mí. Tuve que reiniciar la máquina en la que estaba instalado el servidor. El trabajo imposible de matar ya no existe.
fuente
Simplemente puede copiar el trabajo y eliminar el anterior. Si no importa que haya perdido los viejos registros de compilación.
fuente
Así es como solucioné este problema en la versión
2.100
con Blue Oceanssh
en mi caja de Jenkinscd ~/.jenkins
(donde guardo Jenkins )cd job/<job_name>/branches/<problem_branch_name>/builds
rm -rf <build_number>
Después de esto, puede cambiar opcionalmente el número en
nextBuildNumber
(Hice esto)Finalmente, reinicié jenkins (
brew services restart jenkins
) Este paso obviamente será diferente dependiendo de cómo administre e instale Jenkins.fuente
Ingrese a la interfaz de usuario del océano azul. Intenta detener el trabajo desde allí.
fuente