Diagnóstico de Problemas de Conectividad en Jenkins: Problemas de Red y Agentes

Soluciona problemas de conectividad entre el controlador y los agentes de Jenkins verificando puertos, cortafuegos, agentes entrantes, SSH, Java y registros.

Diagnóstico de Problemas de Conectividad en Jenkins: Problemas de Red y Agentes

Jenkins depende en gran medida de una comunicación robusta entre el controlador central y sus entornos de ejecución (Agentes o Nodos). Cuando esta conectividad falla, las compilaciones se detienen, los pipelines se paralizan y la integración continua se detiene por completo. Diagnosticar estos problemas requiere un enfoque sistemático, a menudo centrándose primero en la topología de red, luego en la configuración del agente y las fallas del protocolo.

Esta guía completa proporciona instrucciones paso a paso para solucionar los problemas de conectividad más comunes de Jenkins, incluidos problemas esquivos de cortafuegos, puertos JNLP mal configurados y fallas de inicio del agente, ayudándole a restaurar operaciones estables y pipelines de CI/CD confiables rápidamente.


1. Comprensión de la Comunicación Controlador-Agente de Jenkins

Antes de solucionar problemas, es esencial comprender cómo el controlador de Jenkins se comunica con sus Agentes. Jenkins ofrece dos métodos principales, cada uno con requisitos de diagnóstico únicos:

1.1 Protocolo de Lanzamiento de Red Java (JNLP)

En el modelo JNLP, el Agente de Jenkins inicia la conexión con el controlador. Este es el enfoque recomendado y más común. El Agente se conecta a un puerto específico en el controlador, ahora comúnmente llamado puerto TCP del agente entrante.

  • Dirección: El agente se conecta al controlador.
  • Puerto Requerido: El puerto TCP del agente entrante del controlador (por defecto a menudo 50000, o asignado dinámicamente).

1.2 Secure Shell (SSH)

En el modelo SSH, el controlador de Jenkins inicia la conexión con el Agente. Esto requiere que la máquina del Agente ejecute un servidor SSH.

  • Dirección: El controlador se conecta AL agente.
  • Puerto Requerido: El puerto SSH del agente (típicamente 22).
  • Requisito: Las credenciales SSH (claves o contraseñas) deben estar configuradas correctamente en Jenkins.

2. Diagnóstico Inicial de Red y Cortafuegos

Los problemas de red, especialmente las restricciones del cortafuegos, son la causa más frecuente de problemas de conectividad. Si un agente se desconecta repentinamente o un nuevo agente no puede conectarse, comience aquí.

2.1 Verificar que los Puertos Requeridos Estén Abiertos

Debe asegurarse de que el tráfico pueda fluir en los puertos necesarios según su modelo de comunicación.

Tipo de Conexión Origen Destino Puerto Requerido Verificación de Estado
Interfaz Web Usuario/Agente Controlador 8080 (o personalizado) Acceso al navegador
Agente entrante Agente Controlador 50000 (o personalizado) telnet o nc
SSH (Controlador -> Agente) Controlador Agente 22 (o personalizado) ssh o telnet

2.2 Uso de Telnet/Netcat para Pruebas de Accesibilidad

Use telnet o nc (Netcat) desde la máquina que se conecta hacia la máquina de destino en el puerto requerido. Una conexión exitosa confirma la accesibilidad de la red y que ningún cortafuegos local está bloqueando el puerto.

Verificación de Accesibilidad del Agente Entrante (desde el Agente al Controlador)

# Reemplace <IP_CONTROLADOR> y <PUERTO_JNLP>
telnet <IP_CONTROLADOR> 50000

# Salida esperada de éxito:
# Connected to <IP_CONTROLADOR>.
# Escape character is '^]'.

# Salida esperada de fallo:
# Trying <IP_CONTROLADOR>...
# telnet: connect to address <IP_CONTROLADOR>: Connection refused

Consejo: Un error de "Conexión Rechazada" indica que la ruta de red está abierta, pero el servicio (Jenkins) no está escuchando en ese puerto, o un cortafuegos local en el controlador lo está bloqueando. Si la conexión se agota, es probable que un cortafuegos entre las máquinas sea el culpable.

2.3 Configurar un Puerto JNLP Fijo

Si está usando JNLP, es una buena práctica configurar un puerto fijo para evitar ambigüedades y simplificar las reglas del cortafuegos. Jenkins puede usar un puerto de agente entrante aleatorio a menos que configure uno fijo, lo que complica la configuración de seguridad.

  1. Navegue a Administrar Jenkins > Seguridad (o Configurar Seguridad Global en versiones anteriores de Jenkins).
  2. Bajo Agentes, busque la opción para Puerto TCP para agentes entrantes.
  3. Seleccione Fijo y especifique un puerto (por ejemplo, 50000).
  4. Asegúrese de que este puerto esté abierto en el cortafuegos del sistema operativo anfitrión (por ejemplo, iptables, firewalld o Cortafuegos de Windows) en la máquina del controlador.

3. Solución de Problemas del Agente JNLP

Si las comprobaciones de red pasan, el problema generalmente está relacionado con la autenticación, la configuración o la falta de coincidencia del entorno.

3.1 Verificar los Registros del Agente en el Controlador

Al intentar lanzar un agente JNLP, revise los registros proporcionados por el propio Jenkins. Navegue a la página de configuración del Agente específico y vea la sección Registro. Esto a menudo proporciona el mensaje de error más claro.

  • Busque errores comunes como java.net.ConnectException o hudson.remoting.ChannelClosedException.

3.2 Asegurarse de que los Argumentos del Agente Sean Correctos

Al lanzar el agente manualmente usando el comando proporcionado por Jenkins (el comando java -jar agent.jar ...), asegúrese de que los parámetros sean correctos.

# Ejemplo de estructura de comando para lanzamiento JNLP
java -jar agent.jar -jnlpUrl http://<URL_JENKINS>/computer/<NOMBRE_AGENTE>/slave-agent.jnlp -secret <TOKEN_SECRETO> -workDir "/ruta/al/espacio_de_trabajo"
  • Verificar la URL JNLP: Asegúrese de que la URL use el nombre de host y puerto correctos del controlador. Si Jenkins está detrás de un proxy inverso, asegúrese de que la configuración de la URL de Jenkins refleje la URL externa.
  • Verificar el Token Secreto: Los tokens caducan o cambian si el nodo se reconfigura. Descargue el .jar más reciente y use el último secreto proporcionado en la página de lanzamiento del Agente.

4. Solución de Problemas del Agente SSH

Si está usando SSH para lanzar agentes, las fallas de conectividad generalmente se deben a problemas de autenticación o del entorno del shell.

4.1 Verificar la Conexión SSH Fuera de Jenkins

Intente conectarse a la máquina del agente desde el controlador usando el nombre de usuario y las credenciales exactos configurados en Jenkins.

ssh -i /ruta/al/archivo_de_clave usuario_jenkins@<IP_AGENTE>
  • Si esto falla, el problema es ambiental: el servicio SSH está caído, las credenciales/claves de usuario son incorrectas, o los permisos de la clave son demasiado permisivos (chmod 600 archivo_de_clave.pem).

4.2 Verificar el Método de Autenticación SSH

  1. Claves: Asegúrese de que la clave pública correspondiente a la clave privada almacenada en el Administrador de Credenciales de Jenkins esté correctamente añadida al archivo ~/.ssh/authorized_keys del usuario del agente.
  2. Contraseñas: Si usa contraseñas, asegúrese de que el servidor SSH en el agente esté configurado para permitir la autenticación por contraseña (no recomendado por seguridad).

4.3 Tiempo de Espera de Lanzamiento del Agente SSH

Si la conexión SSH tiene éxito pero el agente falla al lanzarse, Jenkins puede estar agotando el tiempo de espera al intentar ejecutar los scripts de inicialización. Aumente la configuración de tiempo de espera de la conexión SSH en la página de configuración del Agente.

5. Fallas Comunes del Entorno del Agente

Una vez establecida la conexión de red, el agente aún puede fallar si su entorno operativo es incorrecto.

5.1 Entorno Java (Crucial)

El agente de Jenkins requiere un Entorno de Ejecución Java (JRE/JDK) compatible para ejecutar el archivo agent.jar.

  • Verificar la Presencia de Java: Ejecute java -version en la máquina del agente.
  • Verificar JAVA_HOME: Asegúrese de que la variable JAVA_HOME o Ruta al JDK en la configuración del agente de Jenkins apunte a un directorio de instalación de Java válido en la máquina del Agente.

5.2 Espacio de Trabajo y Permisos de Usuario

La cuenta de usuario que Jenkins usa para ejecutar el agente (ya sea a través del inicio de sesión SSH o del servicio del sistema) debe tener permisos de lectura y escritura en el Directorio Raíz Remoto (espacio de trabajo) definido.

  • Acción: Verifique la propiedad y los permisos del directorio raíz remoto (por ejemplo, /home/jenkins/workspace).

5.3 Sincronización de Tiempo

Aunque es poco común, una desviación de tiempo significativa entre el controlador y la máquina del agente puede causar fallas en el handshake SSL/TLS, resultando en caídas o rechazos de conexión. Asegúrese de que ambas máquinas estén sincronizadas a través del Protocolo de Tiempo de Red (NTP).

Conclusión y Lista de Verificación

Solucionar problemas de conectividad de Jenkins es un proceso de eliminación, comenzando desde el perímetro de la red hacia adentro. Al verificar sistemáticamente los cortafuegos, comprobar la accesibilidad de los puertos usando herramientas como telnet, y confirmar que los protocolos de comunicación (JNLP o SSH) estén correctamente autenticados y configurados, puede identificar y resolver rápidamente los problemas de conectividad.

Lista de Verificación para Solución de Problemas:

  1. Cortafuegos de Red: ¿Está permitido el tráfico bidireccional en el puerto requerido (50000+ para JNLP, 22 para SSH)?
  2. Cortafuegos Local: ¿El cortafuegos del sistema operativo (Windows/Linux) que se ejecuta en el controlador/agente está bloqueando el puerto?
  3. Prueba de Protocolo: ¿telnet tiene éxito desde la máquina que se conecta hacia el destino en el puerto relevante?
  4. Java: ¿Está instalada una versión compatible de Java en el Agente, y la ruta es correcta?
  5. Autenticación: ¿Son válidas las claves/contraseñas SSH, o el token secreto JNLP está actualizado?

Si todos los intentos de conexión fallan, revise los registros del controlador de Jenkins, a menudo disponibles desde el diario del servicio o /var/log/jenkins/jenkins.log, en busca de trazas de pila de remoting y Java.