跳到主要内容

故障排查

Jenkins 故障大体分四类:构建失败、Agent 异常、平台异常(Master 卡、磁盘满)、插件问题。本篇按类给出排查路径。

本篇目标:能按证据链定位构建失败原因,处理 Agent 离线与磁盘问题,识别插件冲突。


1. 构建失败排查路径​

先界定范围,再取证据:

构建失败
├── 是环境问题还是代码问题? → 换一个 Agent/环境重跑
├── 编译失败? → 看编译日志(依赖、版本)
├── 测试失败? → 看测试报告(flaky 还是真失败)
├── 环境/依赖问题? → 检查镜像、依赖源、工具版本
└── 发布/部署失败? → 见第 11 篇,看集群侧事件

1.1 第一轮证据​

# 控制台输出尾部
# 构建页面 → Console Output → 拉到失败处
# 失败 stage 高亮,从最后一个失败的 sh/步骤开始看

# 重跑失败的构建,开「-verbose」级别日志
# 或对比同 Job 上一次成功/失败的构建差异

常见原因:

现象原因与处理
mvn compile 报依赖下载失败内网 Maven 镜像配置、凭据、版本冲突
测试 flaky先判断是偶发(重跑通过)还是稳定失败
Docker 构建失败Dockerfile、网络、镜像 tag、docker in docker 配置
permission deniedAgent 用户权限、挂载卷、sudo 缺失
环境依赖不一致Agent 间工具版本不同,用容器/K8s Agent 统一

1.2 让构建可复现​

生产排查的最大障碍是"这次过了下次挂"。手段:

  • 用容器 / K8s Agent 固化构建环境(第 10 篇);
  • 锁定工具版本(tools 、容器镜像 tag);
  • 记录环境指纹:uname -a、mvn -version、node -v 打到日志开头。

2. Agent 离线 / 不可用​

Agent 离线
├── 网络不通? → 50000 端口、Master 与 Agent 双向可达
├── Agent 进程挂了? → 检查 Agent 服务 / 容器
├── 凭证/连接方式错误? → JNLP token、SSH 私钥
├── 标签不匹配? → Job 要的 label 没有 Agent 提供
└── 动态 Agent 创建失败? → 见第 10 篇(RBAC、镜像、资源)
# 查看 Agent 状态
# Manage Jenkins → Manage Nodes → 点击离线节点查看日志
# Agent 的控制台/服务日志
docker logs <jenkins-agent-container>
journalctl -u jenkins-agent

常见:

现象处理
Connection refused 50000防火墙放行 Agent 连接端口,确认 Master 监听
Agent 连上又断开Master URL、代理、JNLP 版本不匹配
动态 Agent Pod CrashLoop镜像无 cat/sh、command 配置错
标签无匹配节点给 Agent 加标签,或 Job 用对标签

3. Master 卡顿 / 无响应​

Master 无响应
├── CPU/内存被构建挤占? → 内置节点执行器设 0,构建全走 Agent
├── JVM 内存不足? → -Xmx 调大,查 Full GC
├── 磁盘满? → 清理 Workspace / 构建记录 / 日志
├── 并发过高? → 限制并发、检查排队
└── 插件卡死? → 最近更新了什么插件,回滚验证
# 查看 Master 内存与 GC
docker exec jenkins jcmd <pid> GC.heap_info
# 或看 Prometheus 的 jenkins_jvm 指标(第 13 篇)

# 磁盘
df -h /var/jenkins_home

4. 磁盘满​

# 定位大目录
du -sh /var/jenkins_home/* | sort -rh | head -10
du -sh /var/jenkins_home/jobs/* | sort -rh | head -10
大目录处理
jobs/*/workspace加 cleanWs(),或批量清理
jobs/*/builds配置 buildDiscarder 保留策略
jobs/*/lastSuccessful 等定期清理过时符号链接
logs/清理历史日志
plugins/清理无用插件

紧急处理:

# 找到超大 Job 的 workspace 后手动清理
rm -rf /var/jenkins_home/jobs/big-job/workspace/*
磁盘满会让 Jenkins 停止写入

磁盘满时 Jenkins 可能无法保存构建记录、凭证、配置——这是高优先级故障。配置磁盘告警(>80%),并在系统层面设置 DiskThresholdMonitor。

5. 插件冲突​

现象处理
更新插件后功能异常回滚插件版本,或还原 $JENKINS_HOME 中的插件
Job 报 No such DSL method插件未装 / 版本不支持该步骤
启动失败查看 $JENKINS_HOME/logs 错误日志,移除冲突插件目录
# 插件冲突应急:停服移除最近安装的插件目录
rm -rf /var/jenkins_home/plugins/<problem-plugin>.jpi
docker restart jenkins
升级前先备份插件目录

更新插件前备份 $JENKINS_HOME/plugins/,出问题能快速回滚。用一个带 plugins.txt 的自定义镜像(第 2 篇)做版本锁定更稳。

6. 定位工具与信息收集​

工具用途
Jenkins System Info环境变量、系统属性、节点信息
Load Statistics排队、执行器、构建时长历史
Manage Jenkins → Log Recorders按 logger 记录运行日志
$JENKINS_HOME/logs/Master 运行日志
Prometheus 指标队列、Agent、JVM(第 13 篇)
# 开启详细日志定位
# Manage Jenkins → System Log → Add new log recorder
# 添加 jenkins.*、hudson.*、org.jenkinsci.plugins.* 等 logger 观察

7. 练习与验收​

练习 A

  1. 故意让一个构建失败(如改错镜像 tag),用控制台日志定位到失败 stage
  2. 制造一次"无匹配标签",观察 Agent 排队和报错
  3. 用 du 找到最大的 Workspace 并清理,配置 cleanWs

练习 B

  1. 模拟 Agent 离线(停掉一个 Agent 容器),排查连接问题
  2. 安装一个不兼容的插件,观察报错并回滚
  3. 配置 Log Recorder 抓取一个插件的运行日志

验收清单

  • 能按证据链定位构建失败(编译/测试/环境/发布)
  • 会排查 Agent 离线的四类原因
  • 知道 Master 卡顿的排查顺序和磁盘清理手段
  • 能识别并回滚插件冲突
  • 会用 System Info、Log Recorder、Prometheus 定位问题

下一篇:企业最佳实践。