如何在CentOS上备份和恢复Jenkins配置
导读:在 CentOS 上备份与恢复 Jenkins 配置 一 核心要点与准备 确认 JENKINS_HOME(默认通常为 /var/lib/jenkins),备份与恢复均围绕该目录进行。 关键安全文件: $JENKINS_HOME/secr...
在 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 重新拉取或从制品库恢复。
- 权限错误:恢复后执行
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在CentOS上备份和恢复Jenkins配置
本文地址: https://pptw.com/jishu/766088.html
