Ubuntu 上 Jenkins 的备份与恢复
一 备份策略与范围
- 核心数据目录:Jenkins 主目录默认在 /var/lib/jenkins,其中包含 config.xml、jobs、users、plugins 等关键内容;必要时可连同 /var/log/jenkins(日志)与 /var/cache/jenkins(插件缓存)一并备份。若通过包安装,建议同时备份 /etc/default/jenkins(环境变量与启动参数)以及 /usr/share/jenkins(WAR 包)。如使用外部数据库(如 MySQL),需单独对数据库进行导出备份。为减少不一致,建议在备份前先停止服务:sudo systemctl stop jenkins。
二 手动备份步骤
- 停止服务:sudo systemctl stop jenkins
- 打包主目录(推荐整目录备份):sudo tar -czvf jenkins_backup_$(date +%Y%m%d_%H%M%S).tar.gz -C /var/lib/jenkins .
- 仅打包关键配置与作业(可选):sudo tar -czvf jenkins_cfg_$(date +%Y%m%d).tar.gz /var/lib/jenkins/config.xml /var/lib/jenkins/jobs /var/lib/jenkins/users /var/lib/jenkins/plugins
- 将备份文件拷贝到安全位置(如外置盘、NFS、对象存储),并定期做异地/离线留存与校验(如 sha256sum)。
三 自动备份脚本与定时任务
- 示例脚本 backup_jenkins.sh(保留最近 7 天):
#!/usr/bin/env bash
set -e
BACKUP_DIR="/backups/jenkins"
JENKINS_HOME="/var/lib/jenkins"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"
tar -czvf "${BACKUP_DIR}/jenkins_backup_${TIMESTAMP}.tar.gz" -C "$JENKINS_HOME" .
find "$BACKUP_DIR" -name 'jenkins_backup_*.tar.gz' -mtime +7 -delete
- 赋权与定时(每天 02:00 执行):chmod +x backup_jenkins.sh;在 root 或 jenkins 用户的 crontab 中添加:0 2 * * * /path/to/backup_jenkins.sh
- 如需备份脚本自身与 WAR 包,可在脚本中追加相应 cp 命令与保留策略。
四 使用插件进行备份 ThinBackup
- 安装:进入 Manage Jenkins → Manage Plugins 搜索并安装 ThinBackup。
- 配置:在 Manage Jenkins → ThinBackup Settings 中设置备份目录、计划(Cron)、保留策略与排除项。
- 执行与恢复:可点击 Backup Now 立即备份;恢复时在同一页面选择备份点并执行 Restore,完成后重启 Jenkins:sudo systemctl restart jenkins。
五 恢复与迁移步骤
- 准备:在新/原机器安装相同版本的 Java 与 Jenkins,并停止服务:sudo systemctl stop jenkins
- 恢复主目录:
- 整目录覆盖:sudo tar -xzvf jenkins_backup_YYYYMMDD_HHMMSS.tar.gz -C /
- 仅关键文件:按备份内容解压到 /var/lib/jenkins 对应路径
- 权限修复:sudo chown -R jenkins:jenkins /var/lib/jenkins;必要时修正日志与脚本权限
- 配置调整(迁移场景):
- 更新 /var/lib/jenkins/config.xml 中的 为新地址
- 迁移 SSH 密钥(如 Git):将旧 ~/.ssh/id_rsa* 复制到 /var/lib/jenkins/.ssh 并修正属主
- 如启用 HTTPS,迁移 keystore 并在 /etc/default/jenkins 中设置 JAVA_ARGS 指向新证书
- 启动与验证:sudo systemctl start jenkins;查看日志:sudo tail -f /var/log/jenkins/jenkins.log;登录 Web 检查作业、插件、凭证与构建历史;必要时执行插件兼容性处理(如启用未来插件模式)。