Debian系统下Jenkins备份与恢复实操指南
一 核心要点与准备
- 确认Jenkins主目录:通常为**/var/lib/jenkins**(JENKINS_HOME),包含作业、插件、配置等核心数据。必要时同时备份系统配置**/etc/default/jenkins**。为减少不一致,备份前建议将Jenkins置于Quiet Mode(安静模式)或停止服务。恢复时目标机器建议安装与源环境相近的Jenkins版本,避免插件/配置不兼容。
二 手动备份与恢复步骤
- 备份
- 进入维护窗口,建议先停止服务:sudo systemctl stop jenkins
- 打包主目录与关键配置:
tar -czvf jenkins-backup-$(date +%F).tar.gz -C /var/lib/jenkins .
[ -f /etc/default/jenkins ] && tar -czvf jenkins-config-$(date +%F).tar.gz /etc/default/jenkins
- 将备份文件拷贝到安全位置(如外置盘、NFS、对象存储)。
- 恢复
- 在新/目标机器安装Jenkins(版本尽量一致),停止服务:sudo systemctl stop jenkins
- 清空或重命名现有JENKINS_HOME(谨慎操作),然后解压:
tar -xzvf jenkins-backup-YYYY-MM-DD.tar.gz -C /var/lib/jenkins
[ -f jenkins-config-YYYY-MM-DD.tar.gz ] && tar -xzvf jenkins-config-YYYY-MM-DD.tar.gz -C /
- 启动服务并验证:sudo systemctl start jenkins,登录Web检查作业、插件、用户与系统配置。
三 使用插件进行备份恢复 ThinBackup
- 安装与配置
- 在Jenkins管理界面安装ThinBackup插件,进入“系统管理 → ThinBackup”配置:
- Backup directory:备份存放路径
- Backup schedule for full/differential backups:全量/差异备份计划(Cron)
- Max number of backup sets:保留备份集数量
- Files excluded from backup:排除目录/文件
- Wait until Jenkins/Hudson is idle:等待Quiet Mode后备份
- 可选:Backup build results、Backup build archive、Backup ‘userContent’ folder、Backup next build number file、Backup plugins archives、Backup additional files、Clean up differential backups、Move old backups to ZIP files
- 备份与恢复
- 备份:在插件页面点击Backup Now或按既定计划自动执行。
- 恢复:在插件页面选择需要的备份点执行Restore,按提示重启Jenkins。
四 自动化脚本与定时任务示例
- 示例脚本(/usr/local/bin/backup_jenkins.sh)
- 说明:支持全量与增量(基于时间戳)两种模式,自动保留最近N份。
- 使用:chmod +x /usr/local/bin/backup_jenkins.sh
#!/usr/bin/env bash
set -Eeuo pipefail
JENKINS_HOME="/var/lib/jenkins"
BACKUP_BASE="/backups/jenkins"
DATE=$(date +%F_%H-%M-%S)
KEEP_DAYS=7
FULL=1
mkdir -p "$BACKUP_BASE"
if (( FULL == 1 )); then
LAST_FULL=$(find "$BACKUP_BASE" -maxdepth 1 -name "jenkins_full_*.tar.gz" -printf '%T@ %p\n' 2>/dev/null | sort -nr | head -n1 | awk '{print $2}')
if [[ -n "$LAST_FULL" ]]; then
INCR_DIR="$BACKUP_BASE/jenkins_incr_$DATE"
mkdir -p "$INCR_DIR"
rsync -a --link-dest="$LAST_FULL" "$JENKINS_HOME/" "$INCR_DIR/"
tar -czf "$BACKUP_BASE/jenkins_incr_$DATE.tar.gz" -C "$INCR_DIR" .
rm -rf "$INCR_DIR"
else
tar -czf "$BACKUP_BASE/jenkins_full_$DATE.tar.gz" -C "$JENKINS_HOME" .
fi
else
tar -czf "$BACKUP_BASE/jenkins_full_$DATE.tar.gz" -C "$JENKINS_HOME" .
fi
find "$BACKUP_BASE" -name "jenkins_*.tar.gz" -mtime +$KEEP_DAYS -delete
- 定时任务(每天02:00全量,每4小时增量)
- 执行:sudo crontab -e
- 内容:
- 0 2 * * * /usr/local/bin/backup_jenkins.sh 0
- 0 */4 * * * /usr/local/bin/backup_jenkins.sh 1
- 传输与离线存储
- 可结合rsync/云存储命令将备份同步到远程位置,确保异地容灾。
五 注意事项与验证清单
- 版本与兼容性:恢复时尽量保持Jenkins版本与备份时一致;插件版本差异可能导致页面报错或功能异常。
- 一致性:备份前尽量让Jenkins进入Quiet Mode或停止服务,避免运行中写入导致不一致。
- 目录覆盖:恢复为“覆盖式”操作,目标环境若存在同名作业/插件/用户,需提前评估冲突处理策略。
- 构建产物取舍:构建结果与归档可能占用大量空间;仅在需要时备份(ThinBackup中可配置)。
- 配置与凭据:除JENKINS_HOME外,建议同时备份**/etc/default/jenkins**等系统配置;如使用外部凭据/Secret存储,确保相应后端也纳入备份策略。
- 定期演练:定期执行恢复演练与备份完整性校验(如解压验证、抽样比对关键文件),并保留离线/异地副本。