阅读量:2
在 CentOS 上备份与恢复 Jenkins 配置
一 核心要点与准备
- 确认 JENKINS_HOME(默认通常为 /var/lib/jenkins),备份与恢复均围绕该目录进行。
- 关键安全文件:
- $JENKINS_HOME/secrets/hudson.util.Secret(控制器密钥,用于加密凭据,切勿包含在常规备份中)。
- $JENKINS_HOME/master.key(控制器主密钥,需单独、离线、严格保护;完整恢复时再放回)。
- 建议始终备份:config.xml、jobs、users、plugins、secrets(不含 master.key)。
- 可安全排除:workspace、builds/*/artifacts、cache、tools、logs(除非用于审计)。
- 操作前建议先停服以保证一致性(见下文脚本)。
二 方法一 手动脚本备份与恢复(推荐)
- 备份脚本示例(全量与增量二选一)
#!/usr/bin/env bash
# jenkins_backup.sh
set -e
JENKINS_HOME="${JENKINS_HOME:-/var/lib/jenkins}"
BACKUP_ROOT="${BACKUP_ROOT:-/mnt/backups/jenkins}"
DATE=$(date +%Y%m%d_%H%M%S)
TMP_DIR="$BACKUP_ROOT/tmp_$DATE"
ARCHIVE="$BACKUP_ROOT/jenkins_backup_$DATE.tar.gz"
# 0) 创建目录
mkdir -p "$BACKUP_ROOT" "$TMP_DIR"
# 1) 可选:停服保证一致性(小型实例建议停服;大型实例可用 rsync 无锁增量)
sudo systemctl stop jenkins || true
# 2) 备份核心子目录(排除大体积与可重建数据)
rsync -a --delete \
--exclude='workspace/' \
--exclude='builds/*/artifacts/' \
--exclude='cache/' \
--exclude='tools/' \
--exclude='logs/' \
"$JENKINS_HOME/" "$TMP_DIR/"
# 3) 单独导出插件清单(便于恢复后核对/批量安装)
find "$TMP_DIR/plugins" -maxdepth 1 -name '*.jpi' -printf '%f\n' | sed 's/\.jpi$//' \
> "$BACKUP_ROOT/plugins_list_$DATE.txt"
# 4) 打包
tar -czf "$ARCHIVE" -C "$BACKUP_ROOT" "tmp_$DATE"
rm -rf "$TMP_DIR"
# 5) 权限与保留策略(示例:保留最近 30 天)
chmod 600 "$ARCHIVE"
find "$BACKUP_ROOT" -name 'jenkins_backup_*.tar.gz' -mtime +30 -delete
echo "Backup complete: $ARCHIVE"
- 定时任务(每天 02:00 执行)
sudo crontab -e
# 0 2 * * * /opt/scripts/jenkins_backup.sh >> /var/log/jenkins_backup.log 2>&1
- 恢复步骤
#!/usr/bin/env bash
# jenkins_restore.sh
set -e
ARCHIVE="/mnt/backups/jenkins/jenkins_backup_YYYYMMDD_HHMMSS.tar.gz"
JENKINS_HOME="${JENKINS_HOME:-/var/lib/jenkins}"
TMP_DIR=$(mktemp -d)
# 0) 校验
[ -f "$ARCHIVE" ] || { echo "Archive not found: $ARCHIVE"; exit 1; }
# 1) 停服
sudo systemctl stop jenkins
# 2) 备份当前目录(可回滚)
sudo tar -czf "$JENKINS_HOME-backup-$(date +%s).tar.gz" -C "$JENKINS_HOME" .
# 3) 清空并解压
sudo find "$JENKINS_HOME" -mindepth 1 -delete
sudo tar -xzf "$ARCHIVE" -C "$JENKINS_HOME"
# 4) 权限
sudo chown -R jenkins:jenkins "$JENKINS_HOME"
sudo find "$JENKINS_HOME/secrets" -type f -exec chmod 600 {} \;
sudo chmod 644 "$JENKINS_HOME/config.xml"
# 5) 启动并验证
sudo systemctl start jenkins
echo "Restore complete. Check service and UI."
- 安全提示:上述流程未备份 master.key。如做“完整灾难恢复”,请将 master.key 单独离线保管,并在恢复完成后放回 $JENKINS_HOME/ 再启动服务。
三 方法二 使用插件进行备份与恢复
- 安装 ThinBackup 插件(Jenkins 管理 → 插件管理 → 搜索并安装)。
- 配置备份目录与计划(如每日/每周),可一键备份与按时间点恢复。
- 适合希望图形化操作、快速恢复的场景;大规模或跨机房备份仍建议配合脚本/远程存储使用。
四 远程与离线存储方案
- rsync 增量 + 硬链(节省空间与传输)
# 每日增量(--link-dest 指向上一版“latest”)
rsync -av --delete \
--exclude='workspace/' \
--exclude='builds/*/artifacts/' \
--exclude='cache/' \
--exclude='tools/' \
--exclude='logs/' \
"$JENKINS_HOME/" "/mnt/backups/jenkins/incremental/backup_$(date +%Y%m%d_%H%M%S)"
ln -sfn "backup_$(date +%Y%m%d_%H%M%S)" /mnt/backups/jenkins/incremental/latest
- GPG 加密归档(传输/存放更安全)
gpg --encrypt --recipient "backup-admin@company.com" \
--output "$ARCHIVE.gpg" "$ARCHIVE" && rm -f "$ARCHIVE"
- 远程传输示例(FTP,使用 lftp)
lftp -u "$FTP_USER,$FTP_PASS" "$FTP_HOST" <<EOF
set ftp:ssl-allow no
mirror -R "$BACKUP_ROOT" jenkins_home
quit
EOF
- 保留策略示例(清理 30 天前归档)
find "$BACKUP_ROOT" -name 'jenkins_backup_*.tar.gz' -mtime +30 -delete
- 以上方案可与定时任务结合,实现无人值守的远程/加密备份。
五 恢复验证与常见问题
- 验证清单
- 服务状态:
systemctl status jenkins - 启动日志:
tail -f /var/log/jenkins/jenkins.log - Web 界面:登录检查任务、用户、权限、插件是否正常
- 测试构建:选一个简单任务执行,确认日志与产出
- 服务状态:
- 常见问题与处理
- 权限错误:恢复后执行
chown -R jenkins:jenkins $JENKINS_HOME - 版本不兼容:尽量在相近版本间恢复,先小范围演练
- 插件缺失:用备份的 plugins_list_*.txt 批量安装或对比安装
- 构建产物缺失:workspace 与 artifacts 默认不备份,需从 SCM 重新拉取或从制品库恢复。
- 权限错误:恢复后执行
以上就是关于“如何在CentOS上备份和恢复Jenkins配置”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm