18.8.7 灾备演练与恢复流程标准化
本节围绕Jenkins灾备演练与恢复流程标准化,目标是形成可执行、可审计、可复现的演练方案,覆盖RTO/RPO设定、资产清单、恢复顺序、验证标准与持续改进,并配套可运行的脚本、命令与练习。
原理与流程草图(控制面+数据面+外部依赖):
核心目标与指标(示例):
- RTO=30分钟,RPO=15分钟
- 验收标准:控制台可访问、核心插件加载完成、关键流水线可执行、制品可追溯、审计记录可用
- 关键作业优先级:发布主干 > 关键测试 > 非关键任务
灾备资产与依赖清单(示例结构):
JENKINS_HOME/
├── config.xml
├── jobs/
├── plugins/
├── credentials.xml
├── secrets/
├── users/
├── nodes/
├── fingerprints/
└── updates/
外部依赖: Git仓库, 制品库(Nexus/Artifactory), Docker仓库, K8s集群, DNS/证书
备份与恢复基线(示例脚本):
1) 全量+增量策略(全量周备、增量日备)
2) 备份命名含时间戳与校验和
3) 备份完成后做可恢复性测试
# 1. 全量备份(建议离线低峰)
export JENKINS_HOME=/var/lib/jenkins
export BACKUP_DIR=/data/backup/jenkins
TS=$(date +%F_%H%M)
mkdir -p "$BACKUP_DIR"
tar --exclude='workspace' --exclude='caches' \
-czf "$BACKUP_DIR/jenkins_full_${TS}.tar.gz" \
-C "$JENKINS_HOME" .
# 2. 生成校验和
sha256sum "$BACKUP_DIR/jenkins_full_${TS}.tar.gz" \
> "$BACKUP_DIR/jenkins_full_${TS}.sha256"
# 3. 预期效果:备份与校验文件存在
ls -lh "$BACKUP_DIR/jenkins_full_${TS}.*"
恢复标准流程(演练步骤+命令示例):
1) 启动事件与通知
- 演练工单、窗口确认、通知群组
echo "DR Drill Start: $(date)" >> /var/log/jenkins_drill.log
2) 环境准备与依赖校验(DNS/证书/存储)
# DNS解析
dig +short jenkins.example.com
# 证书有效期
openssl x509 -in /etc/ssl/certs/jenkins.crt -noout -dates
# 存储可写
df -h /var/lib/jenkins
3) 恢复JENKINS_HOME
systemctl stop jenkins
# 清空旧目录(谨慎)
rm -rf /var/lib/jenkins.bak
mv /var/lib/jenkins /var/lib/jenkins.bak
mkdir -p /var/lib/jenkins
tar -xzf /data/backup/jenkins/jenkins_full_2024-01-01_0100.tar.gz \
-C /var/lib/jenkins
chown -R jenkins:jenkins /var/lib/jenkins
4) 插件与版本一致性
- 版本锁定:使用离线插件目录或插件清单
# plugins.txt用于离线安装
cat > /var/lib/jenkins/plugins.txt <<'EOF'
git:4.12.1
workflow-aggregator:2.7
credentials:1254.vb_96f366e7b_a_d
EOF
# 使用Jenkins插件CLI离线安装(需jenkins-cli.jar)
java -jar /opt/jenkins-cli.jar -s http://localhost:8080 \
-auth admin:password install-plugin \
-deploy -restart @/var/lib/jenkins/plugins.txt
5) 凭据与密钥恢复
- 确保 secrets 与 master.key 完整
ls -l /var/lib/jenkins/secrets/
test -f /var/lib/jenkins/secrets/master.key && echo "master.key OK"
6) 外部依赖连通性
# Git 仓库连通
git ls-remote https://git.example.com/ops/jenkins-pipeline.git
# 制品库连通
curl -I https://nexus.example.com
# Docker仓库鉴权
docker login registry.example.com
7) 代理节点恢复
# 以systemd方式重启代理
systemctl restart jenkins-agent
systemctl status jenkins-agent
# 预期:Jenkins控制台看到节点在线
8) 核心流水线验证(代表性任务)
- 在Jenkins中新建“DR-Verify”流水线
pipeline {
agent any
stages {
stage('Checkout') {
steps { git 'https://git.example.com/ops/jenkins-pipeline.git' }
}
stage('Build') {
steps { sh 'echo build ok' }
}
stage('Publish') {
steps { sh 'echo publish ok' }
}
}
}
9) 数据一致性校验
# 作业数量统计
find /var/lib/jenkins/jobs -maxdepth 2 -name config.xml | wc -l
# 构建历史文件存在性
find /var/lib/jenkins/jobs -path '*builds*' | head
10) 恢复完成与业务确认
- 产出演练报告:耗时、失败点、修复策略
常见问题与排错(示例):
- Jenkins启动失败(插件冲突)
# 查看启动日志
journalctl -u jenkins -n 200 --no-pager
# 临时禁用插件(重命名.hpi)
mv /var/lib/jenkins/plugins/problematic.hpi \
/var/lib/jenkins/plugins/problematic.hpi.disabled
systemctl restart jenkins
- 凭据无法解密(master.key缺失)
# 确认secrets目录完整
ls -l /var/lib/jenkins/secrets/
# 修复:从同版本备份恢复secrets目录
- 外部依赖不可达(DNS/网络)
# 路由与防火墙
ip route
ss -tulpen | grep 8080
演练练习(建议执行):
1) 备份并在隔离环境恢复,记录RTO/RPO
2) 人为删除一个插件并验证恢复流程
3) 模拟Git不可达,观察失败点并记录改进
交付物清单(模板建议):
- 灾备演练SOP(角色分工、操作步骤、回滚策略)
- 资产与依赖清单
- 备份策略与恢复脚本
- 演练记录与复盘报告
- RTO/RPO达标证明与持续改进计划