Jenkins 节点显示 Offline 通常是因为构建代理进程崩溃或 Master 与 Agent 之间的网络通信中断,最推荐的处理方向是先检查代理端系统日志再重启服务。
先说结论:Jenkins 节点离线主要由网络波动、磁盘空间不足或 Agent 进程意外终止导致,恢复连接需确保网络端口通畅并重启 Agent 服务。
- 先确认:检查 Jenkins Master 管理界面中的节点日志报错信息
- 先处理:验证网络连通性并重启离线的 Agent 进程
- 再验证:在 Master 界面确认节点状态恢复为在线且可执行构建
命令速用版
以下命令用于在 Agent 机器上快速检查进程状态和网络连通性。
Linux 系统检查进程:
ps -ef | grep jenkins
Linux 系统重启服务(systemd):
sudo systemctl restart jenkins-agent
网络连通性测试(从 Agent 到 Master):
telnet <jenkins-master-ip> <port>
Windows 系统检查服务:
Get-Service -Name "JenkinsAgent"
为什么会这样
Jenkins 节点离线本质是 Master 与 Agent 之间的心跳检测失败。
Jenkins 架构中,Master 节点需要定期接收 Agent 发送的心跳信号以确认存活状态。如果 Agent 进程崩溃、服务器重启、防火墙阻断通信端口(默认动态端口或 50000)或磁盘空间耗尽导致无法写入日志,心跳信号就会中断,Master 界面随即显示 Offline 状态。
分步处理
按以下顺序排查可覆盖大多数离线场景。
步骤 1:查看 Master 端节点日志
登录 Jenkins Master 网页,进入“系统管理” > “节点管理”,点击离线节点名称,查看“日志”链接。记录具体的异常堆栈,如 Connection refused 或 IOException。
步骤 2:检查 Agent 端磁盘空间
磁盘空间不足会导致 Agent 无法写入临时文件或日志而退出。在 Agent 机器执行 df -h(Linux)或查看磁盘属性(Windows),确保根目录和工作目录有剩余空间。
步骤 3:验证网络端口
确认 Agent 能访问 Master 的通信端口。Jenkins 默认使用 TCP 端口进行通信,若配置了固定端口通常为 50000,若为动态则需检查防火墙规则。使用 telnet 或 curl 测试连通性。
步骤 4:重启 Agent 服务
根据安装方式重启服务。Linux systemd 服务使用 systemctl restart,Windows 服务使用服务管理器重启,JAR 包启动方式需重新执行 java -jar agent.jar 命令。
怎么验证是否生效
回到 Jenkins Master 的“节点管理”页面,刷新浏览器。
若节点图标由红色离线状态变为绿色在线状态,且“构建执行器”显示空闲或正在构建,说明连接已恢复。尝试触发一个简单构建任务,确认日志能正常输出。
常见坑
- 时间不同步:Agent 与 Master 系统时间偏差过大可能导致 SSL 握手失败或认证过期,需配置 NTP 同步。
- Java 版本不匹配:Agent 运行的 Java 版本低于 Master 要求版本会导致启动失败,检查
java -version。 - 防火墙策略变更:网络团队更新防火墙规则可能意外阻断 Jenkins 通信端口,需确认安全组放行。
常见问题
节点显示 Offline 但进程还在运行怎么办?
这通常是网络单向中断或心跳包丢失,建议直接在 Master 界面点击“重新连接”按钮,若无效再重启 Agent 进程。
Jenkins Agent 日志在哪里查看?
Linux 系统通常位于 /var/log/jenkins/ 或启动脚本指定的输出文件,Windows 系统通常在服务日志或启动控制台输出中。
如何防止节点频繁离线?
建议配置进程守护工具(如 systemd 或 Windows 服务恢复选项),设置进程崩溃后自动重启,并监控磁盘空间和网络稳定性。
参考来源
- Jenkins 官方文档 - Connecting agents: https://www.jenkins.io/doc/book/managing/connecting-agents/
- Jenkins 官方文档 - Viewing logs: https://www.jenkins.io/doc/book/system-administration/viewing-logs/