Jenkins 备份恢复、升级与故障排查

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。

RPO(Recovery Point Objective,可容忍数据丢失窗口)由备份频率决定;RTO(Recovery Time Objective,恢复耗时目标)须通过演练测量。先能恢复,再升级。

1. 一致性备份#

针对 Compose 部署。安装 age 加密工具,准备备份接收方公钥 BACKUP_RECIPIENT 与独立保管的 KEY_RECIPIENT;私钥不放 Controller。

  1. Manage Jenkins → Prepare for Shutdown,停止接收新构建,等待在途任务完成;审批中的任务也要明确结束或记录恢复方式。
  2. 暂停 Webhook/定时触发入口,记录镜像 digest、核心/Java/插件版本和配置提交。
  3. 停止后备份 Home,避免运行中打包产生不一致快照:
set -euo pipefail
: "${JENKINS_HOME_DIR:?}" "${BACKUP_RECIPIENT:?}" "${KEY_RECIPIENT:?}"
export BACKUP_DIR="$(pwd)/backup-$(date -u +%Y%m%dT%H%M%SZ)"
mkdir -m 700 "$BACKUP_DIR"
docker compose stop controller
sudo tar --exclude='./secrets/master.key' -C "$JENKINS_HOME_DIR" -czf - . | age -r "$BACKUP_RECIPIENT" > "$BACKUP_DIR/home.tar.gz.age"
sudo cat "$JENKINS_HOME_DIR/secrets/master.key" | age -r "$KEY_RECIPIENT" > "$BACKUP_DIR/master.key.age"
(cd "$BACKUP_DIR" && sha256sum *.age > SHA256SUMS)
docker compose start controller
  1. Home 密文和校验单送到受控备份仓库;master.key 密文送到独立权限的密钥备份位置。确认都可恢复后清理本地暂存。
  2. 恢复触发入口、退出维护状态,运行测试任务。

Home 含凭据密文和其他秘密,应整体加密。master.key 与 secrets/hudson.util.Secret 都关系到凭据解密,隔离保管不等于漏备份。官方要求

2. 隔离恢复演练#

新建私有虚拟机,默认阻断生产 Agent、Webhook、外网和云元数据,撤掉生产实例角色。克隆任务可能恢复执行,必须先隔离网络和身份再启动。

set -euo pipefail
: "${RESTORE_HOME:?new empty directory}" "${BACKUP_IDENTITY:?}" "${KEY_IDENTITY:?}"
# 从两个受控备份位置下载密文和可信校验单到当前目录。
sha256sum -c SHA256SUMS
sudo install -d -m 700 -o 1000 -g 1000 "$RESTORE_HOME"
[ -z "$(sudo ls -A "$RESTORE_HOME")" ] || { echo 'Restore directory must be empty'; exit 1; }
age -d -i "$BACKUP_IDENTITY" home.tar.gz.age | sudo tar -xzf - -C "$RESTORE_HOME"
age -d -i "$KEY_IDENTITY" master.key.age | sudo tee "$RESTORE_HOME/secrets/master.key" >/dev/null
sudo chown -R 1000:1000 "$RESTORE_HOME"
sudo chmod 600 "$RESTORE_HOME/secrets/master.key"
export JENKINS_HOME_DIR="$RESTORE_HOME"
# 使用备份对应的镜像、配置、测试 URL 与受控秘密挂载。
docker compose up -d controller

确认任务/历史和登录正常,用专用测试凭据验证解密及 Agent 连接,不调用生产凭据。按备份时间与恢复耗时测量 RPO/RTO。校验和随可信仓库元数据保存,其本身不提供防篡改认证。

3. 核心与插件升级#

  1. 阅读目标及跨越版本的 LTS 升级指南、Java 要求与插件安全公告。
  2. 在隔离恢复副本验证核心、Java、插件组合;老旧实例按官方迁移说明分阶段升级,不假设任何跨度均可直升。
  3. 测试 Git、Agent、共享库、审批、锁、报告、凭据及恢复。
  4. 维护窗口停止接收任务 → 停止 → 完整备份 → 更新固定镜像/配置 → 启动验收。
  5. 失败恢复升级前 Home + 镜像 + 配置。新版可能迁移磁盘数据,不能仅切回旧镜像。

插件小版本也要验证兼容性;禁止生产直接全部升级。Home 中实际插件版本须与发布记录对照。

4. 故障定位#

现象 先检查 处理要点
持续排队 标签、节点在线、执行器、锁、配额 不增加 Controller 执行器救急
Agent 掉线 WebSocket、代理超时、DNS、证书、资源 区分基础设施故障与应用失败再重试
磁盘满 历史、workspace、镜像缓存、日志 配置留存,不直接删配置和凭据
内存不足 JVM 堆、线程、GC、容器 OOM 留堆外内存,限制并发
无法启动 插件依赖、Java、JCasC、文件权限 查日志,恢复已验证组合
凭据失效 角色信任、时间同步、授权、过期 不打印 token 或完整环境变量

JVM 为 Java Virtual Machine,GC 为 Garbage Collection,OOM 为 Out Of Memory。监控队列等待、离线 Agent、磁盘、堆、失败率、备份年龄和恢复演练,阈值根据实际基线设置。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭