2012-04-03 16 views
37

Actualmente estoy viendo un conjunto de errores en mis compilaciones.Trabajos esclavos de Jenkins que fallan en "Terminación inesperada del canal"

¿Este comportamiento esperado es si pierdes a Jenkins (por ejemplo, a un bloqueo de caja o a un kill -9)?

¿O está pasando algo peor (como una mala conexión de red)?

La pila y el error es:

hudson.remoting.RemoteInvocationHandler.invoke(RemoteInvocationHandler.java:158) 
     at $Proxy175.join(Unknown Source) at 
hudson.Launcher$RemoteLauncher$ProcImpl.join(Launcher.java:861)  at 
hudson.Launcher$ProcStarter.join(Launcher.java:345)  at 
hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:82) 
     at 
hudson.tasks.CommandInterpreter.perform(CommandInterpreter.java:58) 
     at hudson.tasks.BuildStepMonitor$1.perform(BuildStepMonitor.java:19) 
     at 
hudson.model.AbstractBuild$AbstractRunner.perform(AbstractBuild.java:703) 
     at hudson.model.Build$RunnerImpl.build(Build.java:178) at 
hudson.model.Build$RunnerImpl.doRun(Build.java:139)  at 
hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:473) 
     at hudson.model.Run.run(Run.java:1410) at 
hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)  at 
hudson.model.ResourceController.execute(ResourceController.java:88) 
     at hudson.model.Executor.run(Executor.java:238) Caused by: 
hudson.remoting.RequestAbortedException: java.io.IOException: 
Unexpected termination of the channel at 
hudson.remoting.Request.abort(Request.java:273)  at 
hudson.remoting.Channel.terminate(Channel.java:732)  at 
hudson.remoting.Channel$ReaderThread.run(Channel.java:1157) Caused by: 
java.io.IOException: Unexpected termination of the channel at 
hudson.remoting.Channel$ReaderThread.run(Channel.java:1133) Caused by: 
java.io.EOFException at 
java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2554) 
     at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1297) 
     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) 
     at hudson.remoting.Channel$ReaderThread.run(Channel.java:1127) 
+0

¿Qué versión de Jenkins está usando? – Sagar

Respuesta

38

Usted verá que el error si el maestro Jenkins pierde la conexión con el esclavo . Podría ser debido a cualquiera de los tres temas que se enumeran más arriba:

  • matar manualmente el proceso esclavo

  • El servidor esclavo de estar disponible

  • un problema de red entre el maestro y el esclavo

+0

¿Cómo resolvemos esto si este problema persiste? – farheen

+31

Si se trata simplemente de una respuesta lenta del esclavo, intente desactivar la comprobación del tiempo de respuesta como una solución temporal. Vaya a Gestionar Jenkins> Gestionar nodos> Configurar y desmarque la casilla "Tiempo de respuesta". Eso te ayudará hasta que puedas darle más recursos si es solo un esclavo lento. –

+0

Este último comentario lo hizo por mí. – Gesh

2

Otra cosa donde puede ver este error (que en realidad conduce a esto) es la falta de memoria/núcleos de CPU para el edificio re. Pasé un tiempo probándolo y resolví este problema en nuestro sitio al aumentar el tamaño del almacenamiento dinámico de Java (y agregar más memoria a las máquinas), aumentando el número de núcleos (por lo que una máquina tiene al menos 4G de RAM con dos núcleos disponibles con una ranura de compilación), y también hacer algunos ajustes (si está en Linux) número de descriptores de archivos abiertos y procesos que se pueden ejecutar al mismo tiempo.

3

Para mí, la configuración del nodo tenía una "raíz de FS remota" incorrecta. Por lo tanto, verifique si todos los parámetros de configuración en el maestro para este nodo esclavo son correctos. Jenkins no se queja, pero termina la conexión.

Tuve muchos problemas antes de determinar si era la configuración del nodo. Al menos el mensaje de error en el maestro debe ser más explícito o informativo.

1

Sé que esta pregunta es un poco antigua, pero me encontré con este problema el otro día.

Para mí el problema estaba ocurriendo durante la instalación del JDK. La instalación falló porque la configuración de seguridad de Windows estaba configurada, por lo que apareció el cuadro de notificación que dice: "Debe dar permiso para esta operación", lo que provocó que la instalación fallara.

Cambié la configuración de notificación a "No notificar nunca" y se solucionó este problema.

5

Desde 1.520, Jenkins requiere Java 6 o posterior, una de las posibilidades de este error es que no tiene java 6 o posterior en esclavo/remoto. La resolución es actualizar su máquina remota con java 6 o posterior o establecer la variable de entorno correcta que SSH utiliza mientras inicia sesión en la máquina esclava.

+0

Estimado Halim, usted acaba de alegrarme el día. –

+0

Gracias. Iba a dejar una nota sobre esto pero tuviste la respuesta. Cambié de JDK 6 a 7, lo que resolvió el problema. Los pasos para la solución de problemas fueron observar el registro de esclavos de Jenkins (en el servidor maestro de jenkins) que indicaba errores de clase no encontrados que me llevaron a intentar una jdk diferente. – leeman24

3

La versión de java debe ser 1.6 (más reciente) o más nueva para Jenkins 1.531 que estoy usando.

Para uno de mis nodos esclavos descubrí que tenía que establecer la ruta de Java en el botón 'Método de lanzamiento' Avanzado 'JavaPath' para el nodo antes de que esto funcione correctamente. El problema era que el nodo seguía usando una versión anterior de Java que no pude actualizar.

4

Lo resolví con un simple reinicio del servidor maestro de Jenkins.

+0

No sé por qué alguien le votó negativamente. Esta fue esa solución para mí. https://groups.google.com/forum/#!topic/jenkinsci-users/ZsNnfs5bEAs –

0

En CentOS Linux 7, descubrí que el esclavo Jenkins no funciona con OpenJDK. Intenté Java 7 y 8. Requiere Oracle Java.

Por lo tanto, si está en Linux, instale Oracle Java y configure la ruta para que apunte a él. Usted puede hacer esto de varias maneras, por ejemplo .:

  • Conjunto $JAVA_HOME para el usuario que está lanzando el esclavo, y añadirlo a $PATH.
  • Use update-alternatives para establecer el valor predeterminado java.
  • Establezca JavaPath, bajo la configuración Advanced del nodo en Jenkins.
0

Tuve problemas similares con los esclavos de Jenkins que terminaron cuando actualicé Jenkins a la versión 2.9.2 desde 2.1.5.

Todos los problemas relacionados con la actualización como la terminación inesperada de Slave se corrigieron al instalar la versión de Java 8 en Centos.

yum install java-1.8.0-OpenJDK-devel

Cuestiones relacionadas