Jenkins灾备咨询:EC2双实例实时自动备份与恢复实现方案
Jenkins生产与备份服务器实时同步及灾备恢复方案
一、基础部署准备
- 两台EC2实例分别部署Jenkins,必须保证生产(Jenkins-Prod)和备份(Jenkins-Backup)的Jenkins版本、插件版本完全一致,避免配置同步后出现兼容性问题
- 配置EC2安全组,允许两台服务器间的SSH(22端口)通信,同时确保Jenkins默认服务端口(8080)可正常访问
- 在备份服务器上配置免密SSH登录到生产服务器,消除同步时的密码输入环节:
# 在Jenkins-Backup生成RSA密钥对(无则生成) ssh-keygen -t rsa -b 4096 # 将公钥复制到Jenkins-Prod的Jenkins用户授权列表 ssh-copy-id jenkins@<Prod-EC2-IP>
二、实时任务同步方案
方案1:SSH脚本+构建触发器(优化你的初步思路)
核心逻辑是在备份服务器创建同步任务,定期/触发式拉取生产服务器的任务配置并同步到本地:
- 确认Jenkins-Prod的任务配置存储目录(默认
/var/lib/jenkins/jobs/)对Jenkins用户有读写权限 - 在Jenkins-Backup创建自由风格项目
Sync-Prod-Jobs - 添加"执行shell"构建步骤,写入同步脚本:
# 清空本地旧任务配置(可选,避免冗余) rm -rf /var/lib/jenkins/jobs/* # 从生产服务器同步所有任务配置到本地 scp -r jenkins@<Prod-EC2-IP>:/var/lib/jenkins/jobs/* /var/lib/jenkins/jobs/ # 重载Jenkins配置(无需重启服务) curl -X POST http://localhost:8080/reload --user <Jenkins-Backup-Admin>:<API-Token> - 配置构建触发器:
- 选择"轮询SCM",设置时间表达式(比如
* * * * *实现每分钟同步一次,接近实时) - 或选择"远程触发",在Jenkins-Prod的所有任务中添加"构建后操作",触发Jenkins-Backup的
Sync-Prod-Jobs任务(需配置跨服务器触发令牌)
- 选择"轮询SCM",设置时间表达式(比如
方案2:Jenkins插件同步(更稳定可靠)
推荐用成熟插件替代脚本,减少维护成本:
Job Import Plugin方案
- 在Jenkins-Backup安装Job Import Plugin
- 创建"Job Import"类型任务
- 配置源服务器:填入Jenkins-Prod的URL,添加认证凭据(用户名+API Token)
- 设置同步规则:选择需要同步的任务(或全量),开启自动同步,当生产服务器任务变更时自动同步到备份服务器
Backup Plugin方案
- 在Jenkins-Prod安装Backup Plugin,配置定期将任务打包备份到
/var/lib/jenkins/backups/目录 - 在Jenkins-Backup通过SSH拉取备份文件并恢复:
scp jenkins@<Prod-EC2-IP>:/var/lib/jenkins/backups/latest-job-backup.zip /tmp/ unzip /tmp/latest-job-backup.zip -d /var/lib/jenkins/jobs/ curl -X POST http://localhost:8080/reload --user <Admin-User>:<API-Token>
三、灾备恢复步骤
当生产服务器故障时,将备份服务器的任务恢复到新生产实例(或修复后的原生产服务器):
- 在新Jenkins-Prod实例上配置免密SSH登录到Jenkins-Backup
- 执行恢复脚本:
scp -r jenkins@<Backup-EC2-IP>:/var/lib/jenkins/jobs/* /var/lib/jenkins/jobs/ # 重载Jenkins配置 curl -X POST http://localhost:8080/reload --user <Admin-User>:<API-Token> - 验证任务配置、构建历史是否正常;注意:任务配置不包含敏感凭据,需单独同步:可使用Jenkins凭据导出/导入功能,或配合AWS Secrets Manager实现凭据共享
- 若使用Backup Plugin,直接在新生产服务器上导入备份文件即可
四、关键注意事项
- 定期验证同步效果:手动修改生产服务器任务配置,检查备份服务器是否同步成功
- 记录同步日志:在脚本中添加日志输出,方便排查问题,比如
scp ... >> /var/log/jenkins-sync.log 2>&1 - 定期模拟灾备场景:每季度至少一次模拟生产服务器故障,验证恢复流程的可行性
内容的提问来源于stack exchange,提问作者Aravind S
相关产品推荐
相关产品推荐

