centos

如何在CentOS上备份和恢复Jenkins配置

小樊
33
2025-12-07 20:32:28
栏目: 智能运维

在 CentOS 上备份与恢复 Jenkins 配置

一 核心要点与准备

二 方法一 手动脚本备份与恢复(推荐)

#!/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"
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."

三 方法二 使用插件进行备份与恢复

四 远程与离线存储方案

# 每日增量(--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 --encrypt --recipient "backup-admin@company.com" \
  --output "$ARCHIVE.gpg" "$ARCHIVE" && rm -f "$ARCHIVE"
lftp -u "$FTP_USER,$FTP_PASS" "$FTP_HOST" <<EOF
set ftp:ssl-allow no
mirror -R "$BACKUP_ROOT" jenkins_home
quit
EOF
find "$BACKUP_ROOT" -name 'jenkins_backup_*.tar.gz' -mtime +30 -delete

五 恢复验证与常见问题

0
看了该问题的人还看了