跳到主要内容

高可用与备份恢复

Jenkins 的高可用和数据库高可用思路不同——Jenkins 的"状态"几乎全在 $JENKINS_HOME 文件系统里。因此备份恢复是第一优先级,多实例是第二优先级。

本篇目标:能制定并执行 $JENKINS_HOME 的备份策略,理解多 Master 方案的取舍,完成一次恢复演练。


1. 核心:备份 $JENKINS_HOME​

Jenkins 的所有配置、Job、凭证、插件状态、构建记录都在 $JENKINS_HOME。备份它 = 备份整个 Jenkins。

1.1 需要备份什么​

内容位置(在 $JENKINS_HOME 下)优先级
Job 配置jobs/高
凭证secrets/、credentials.xml高(含密钥)
全局配置config.xml高
插件状态plugins/(可重装,但版本信息重要)中
构建记录 / 产物jobs/*/builds/中(大,按需)
用户 / 权限users/中

1.2 备份方式对比​

方式说明推荐
直接拷贝 $JENKINS_HOME简单,但非原子、可能备份到写一半的状态加锁/停止写入时做
ThinBackup 插件按 Job 归档,支持恢复到指定时间中小团队常用
快照(云盘/文件系统)原子、快生产首选
定时 rsync + 版本配合快照做增量结合场景
# 云盘快照(生产首选):对挂载 $JENKINS_HOME 的卷做快照
# 或 rsync 备份
rsync -a --delete /var/jenkins_home/ backup:/backup/jenkins-home/ \
--exclude 'workspace/' --exclude 'logs/'
备份时机

构建进行中拷贝 $JENKINS_HOME 可能拿到写一半的文件。生产上建议:先停写入(SafeRestart 或维护窗口),或使用支持一致性的快照。恢复前用 jenkins-jobs / 校验工具检查完整性。

1.3 备份策略建议​

频率:每日全量 + 保留 30 天;关键变更(升级/大改)前手动快照
验证:每周做一次"恢复到测试目录"演练,确认能启动
异地:备份文件复制到异地或对象存储,防单点故障

2. 恢复演练​

# 1. 在测试机器解压备份
tar xzf jenkins-home-backup.tgz -C /tmp/jenkins-restore/

# 2. 用备份启动一个临时 Jenkins
docker run -d --name jenkins-restore \
-v /tmp/jenkins-restore:/var/jenkins_home \
-p 18080:8080 \
jenkins/jenkins:lts-jdk17

# 3. 访问 http://localhost:18080,确认 Job、凭证、配置都在
# 4. 触发一个 Job 验证能跑通

恢复演练至少验证:

  • Jenkins 能正常启动,无配置损坏
  • Job 列表完整,可运行
  • 凭证可解密使用(secrets/ 一致)
  • 用户能登录,权限正常
  • Agent 能重新连接

3. 多 Master(HA)方案​

3.1 方案对比​

方案架构优点缺点
单 Master + 多 Agent(推荐)一个调度中心简单、数据一致Master 本身单点
主备 + 共享存储备实例共享 $JENKINS_HOME故障切换快共享存储本身要 HA,并发写有风险
冷备备机定期同步,不运行简单切换有延迟,手动
Jenkins 官方 HA(试验)多控制器 + 共享状态真正高可用配置复杂、仍不稳定
现实建议

大多数团队的正确选择是:单 Master + 多 Agent + 可靠的备份恢复。Jenkins 不是低延迟数据库,Master 宕机几十分钟通常可接受,重点是"恢复时间"而不是"零停机"。盲目上多 Master 反而引入状态一致性问题。

3.2 多 Agent 本身就是"弹性高可用"​

构建负载由多个 Agent 承接,Master 挂了 Agent 只是等命令,不丢构建。所以:

  • 把 Master 做好备份(快速恢复);
  • Agent 可多(弹性),Master 求稳(不跑构建)。

4. 灾备演练​

RTO(恢复时间目标):建议 < 4 小时
RPO(数据丢失容忍):建议 ≤ 24 小时(每日备份)
# 定期演练记录
# 1. 从最新备份恢复出临时实例
# 2. 记录恢复耗时(RTO 达标?)
# 3. 验证关键 Job 能构建
# 4. 记录发现的缺口(凭证丢失?插件缺版本?)

5. 练习与验收​

练习 A

  1. 用 rsync 或 ThinBackup 对当前 Jenkins 做一次全量备份
  2. 在新目录恢复备份,启动临时 Jenkins 实例,确认 Job 和凭证完整
  3. 记录从备份到恢复的耗时

练习 B

  1. 模拟故障:删掉一个 Job,再从备份恢复
  2. 配置每日备份 + 保留策略(脚本或插件)
  3. 评估你们的 RTO / RPO,写一份灾备演练记录

验收清单

  • 知道 $JENKINS_HOME 是备份核心,理解各子目录的重要性
  • 能执行备份和恢复演练,验证 Job/凭证/用户完整
  • 了解多 Master 方案的取舍,知道单 Master + 多 Agent + 备份是常见正解
  • 制定了备份频率、保留期和异地存储策略
  • 有可量化的 RTO / RPO 并演练过

下一篇:安全加固。