Jenkins Agent无法通过JNLP连接(主从节点均安装Java 11)
Jenkins Agent无法通过JNLP连接主节点(连接超时)解决方案
问题概述
Jenkins Agent通过JNLP连接主节点时失败,日志底层报错为java.net.ConnectException: 连接超时,主节点与Agent均已安装Java 11。
错误日志详情
2023年2月17日 上午10:06:16 org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir 信息:使用/home/ubuntu/remoting作为远程工作目录 2023年2月17日 上午10:06:16 org.jenkinsci.remoting.engine.WorkDirManager setupLogging 信息:错误日志和输出日志均将打印至/home/ubuntu/remoting 2023年2月17日 上午10:06:16 hudson.remoting.jnlp.Main createEngine 信息:正在设置Agent:test 2023年2月17日 上午10:06:16 hudson.remoting.Engine startEngine 信息:使用Remoting版本:3071.v7e9b_0dc08466 2023年2月17日 上午10:06:16 org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir 信息:使用/home/ubuntu/remoting作为远程工作目录 2023年2月17日 上午10:08:27 hudson.remoting.jnlp.Main$CuiListener error 严重:连接失败。 io.jenkins.remoting.shaded.jakarta.websocket.DeploymentException: Connection failed. at io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.JdkClientContainer$1.call(JdkClientContainer.java:187) at io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.JdkClientContainer$1.call(JdkClientContainer.java:107) at io.jenkins.remoting.shaded.org.glassfish.tyrus.container.jdk.client.JdkClientContainer.openClientSocket(JdkClientContainer.java:192) at io.jenkins.remoting.shaded.org.glassfish.tyrus.client.ClientManager$3$1.run(ClientManager.java:647) at io.jenkins.remoting.shaded.org.glassfish.tyrus.client.ClientManager$3.run(ClientManager.java:696) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at io.jenkins.remoting.shaded.org.glassfish.tyrus.client.ClientManager$SameThreadExecutorService.execute(ClientManager.java:849) at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:118) at io.jenkins.remoting.shaded.org.glassfish.tyrus.client.ClientManager.connectToServer(ClientManager.java:493) at io.jenkins.remoting.shaded.org.glassfish.tyrus.client.ClientManager.connectToServer(ClientManager.java:337) at hudson.remoting.Engine.runWebSocket(Engine.java:674) at hudson.remoting.Engine.run(Engine.java:499) Caused by: java.net.ConnectException: 连接超时 at java.base/sun.nio.ch.UnixAsynchronousSocketChannelImpl.checkConnect(Native Method) at java.base/sun.nio.ch.UnixAsynchronousSocketChannelImpl.finishConnect(UnixAsynchronousSocketChannelImpl.java:252) at java.base/sun.nio.ch.UnixAsynchronousSocketChannelImpl.finish(UnixAsynchronousSocketChannelImpl.java:198) at java.base/sun.nio.ch.UnixAsynchronousSocketChannelImpl.onEvent(UnixAsynchronousSocketChannelImpl.java:213) at java.base/sun.nio.ch.EPollPort$EventHandlerTask.run(EPollPort.java:306) at java.base/java.lang.Thread.run(Thread.java:829)
排查与解决步骤
1. 网络连通性验证
- 在Agent节点执行端口连通性测试:
# 替换为主节点IP和JNLP端口(默认50000) telnet <主节点IP> 50000 # 或用nc命令 nc -zv <主节点IP> 50000 - 检查主节点与Agent之间的防火墙、安全组规则,确保**JNLP端口(默认50000)**和Jenkins服务端口(如8080)双向开放。
- 确认Agent能解析主节点的主机名(若使用域名/主机名连接):
ping <主节点主机名>
2. Jenkins主节点配置检查
- 进入
Manage Jenkins > Configure Global Security,确保Agent protocols中勾选了JNLP4-connect(当前Remoting版本默认使用该WebSocket协议)。 - 进入
Manage Jenkins > Configure System,验证Jenkins URL为Agent可访问的公网/内网地址,避免使用localhost或仅主节点本地可达的地址。 - 若主节点使用反向代理(如Nginx),需添加WebSocket转发配置到代理location块:
proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_http_version 1.1;
3. Agent启动命令校验
- 确认启动命令中的
-url参数指向正确的Jenkins主节点地址,示例:java -jar agent.jar -url http://jenkins-master:8080/ -secret <节点密钥> -name test - 若主节点启用HTTPS,需确保Agent的Java环境信任主节点证书,或临时添加
-noCertificateCheck参数(生产环境不推荐)跳过证书验证。
4. Remoting版本兼容优化
- 从主节点
http://<jenkins-url>/jnlpJars/agent.jar下载最新版Agent Jar包,替换Agent节点上的旧版本,避免版本兼容问题(当前日志中Remoting版本3071.v7e9b_0dc08466与Java 11兼容,但更新版本可修复已知问题)。
内容的提问来源于stack exchange,提问作者Mani
相关产品推荐
相关产品推荐

