温馨提示×

centos jenkins部署的备份策略是什么

小樊
44
2025-12-23 15:40:41
栏目: 智能运维

CentOS 上 Jenkins 的备份策略

一 备份范围与优先级

  • 核心目录与文件:优先保护 $JENKINS_HOME(默认 /var/lib/jenkins),至少包含 config.xmljobs/plugins/users/;如空间允许,可一并纳入 workspace/builds/secrets/credentials.xml 等以保证完整可恢复性。
  • 系统级配置:备份 /etc/sysconfig/jenkins/etc/default/jenkins(系统服务参数、JENKINS_HOME 路径、端口等)。
  • 日志:备份 /var/log/jenkins(便于审计与问题定位)。
  • 版本与插件清单:导出已安装插件列表(如 CLI 执行 list-plugins),便于跨环境重建。
  • 备份粒度建议:日常做“配置级”备份(轻量、高频),周期性做“全量+构建历史”备份(重量、低频)。

二 备份方式与工具

  • 手动全量打包:在停机或低峰期停止服务,使用 tar$JENKINS_HOME 及系统配置打包压缩,适合一次性迁移或重大变更前。
  • 脚本化自动备份:编写 Shell 脚本结合 tardate 命名,加入保留策略(如保留 7 天),并通过 crontab 定时执行。
  • 插件辅助备份:使用 ThinBackup 插件实现定时“全备/差异备”、保留份数控制与一键恢复,适合在线环境与频繁变更场景。
  • 仅配置级备份:在内网/离线环境或仅需迁移配置时,拷贝 config.xml、jobs、plugins、users、secrets 等核心文件/目录,快速在新环境恢复。
  • 远程/异地备份:脚本中使用 lftp 将备份同步到 FTP/SFTP 服务器,实现跨机房或云端留存。

三 推荐备份策略与保留

  • 频率与方式:
    • 配置级(ThinBackup 或脚本):建议每日执行;
    • 全量+构建历史:建议每周一次或每次重大变更前执行。
  • 保留周期:按“日常 7 天每周 4 周每月 3 月”分级留存,既控成本又满足回滚窗口。
  • 命名与落地:统一命名如 jenkins_backup_YYYYMMDD_HHMMSS.tar.gz;本地保留一份,同时推送至远程存储/FTP
  • 一致性:停机备份一致性最高;如要求零停机,可采用文件系统快照或暂时将 Jenkins 置于维护模式后再备份。
  • 监控与验证:定期校验备份文件可用性(解压抽查、清单核对),并保留备份日志告警

四 示例脚本与定时任务

  • 全量备份脚本(含保留策略,保留最近 7 天)
#!/bin/bash
# jenkins_full_backup.sh

export JENKINS_HOME="${JENKINS_HOME:-/var/lib/jenkins}"
BACKUP_BASE="/backups/jenkins"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
ARCHIVE="$BACKUP_BASE/jenkins_full_$TIMESTAMP.tar.gz"

# 创建备份目录
mkdir -p "$BACKUP_BASE"

# 可选:低峰停机(确保业务允许)
# systemctl stop jenkins

# 执行打包(排除虚设与无关挂载点)
tar --exclude='proc' --exclude='lost+found' --exclude='mnt' --exclude='sys' \
    --exclude="$BACKUP_BASE" -czf "$ARCHIVE" -C / "$JENKINS_HOME" \
    /etc/sysconfig/jenkins /etc/default/jenkins /var/log/jenkins 2>/dev/null

# 可选:启动服务
# systemctl start jenkins

# 保留最近7天
find "$BACKUP_BASE" -name 'jenkins_full_*.tar.gz' -mtime +7 -delete

echo "Backup finished: $ARCHIVE"
  • 定时任务(每天 02:00 执行)
# crontab -e
0 2 * * * /usr/bin/bash /opt/scripts/jenkins_full_backup.sh >> /var/log/jenkins_backup.log 2>&1
  • 远程备份脚本示例(备份后同步到 FTP)
#!/bin/bash
FTP_HOST="192.0.2.10"
FTP_USER="backup"
FTP_PASS="s3cr3t"
SOURCE_DIR="/var/lib/jenkins"
BACKUP_FILE="/backups/jenkins/jenkins_$(date +%F).tar.gz"

# 先本地打包(略:tar ...)

# 上传到 FTP
lftp -u "$FTP_USER","$FTP_PASS" "$FTP_HOST" <<EOF
set ftp:ssl-allow no
mirror -R "$SOURCE_DIR" jenkins_home
quit
EOF
  • 权限与常见坑:脚本使用绝对路径;若脚本来自 Windows,先执行 dos2unix 去除 CRLF;FTP 需开放 21 端口并验证连通性。

五 恢复流程与注意事项

  • 手动恢复(全量包):
    1. 停止 Jenkins;2) 备份当前 $JENKINS_HOME;3) 解压备份到目标 $JENKINS_HOME;4) 如 JENKINS_HOME 变更,更新 /etc/sysconfig/jenkins/etc/default/jenkins 中的 JENKINS_HOME;5) 启动 Jenkins 并验证。
  • ThinBackup 恢复:在 Manage Jenkins → ThinBackup → Restore 选择备份点执行恢复。
  • 仅配置级恢复:将 config.xml、jobs、plugins、users、secrets 拷入新 $JENKINS_HOME 后启动,必要时在控制台调整 JDK/Git/Maven 等路径。
  • 版本与兼容性:尽量在相近版本间恢复;跨大版本或插件差异较大时,先小范围演练。
  • 凭证与密钥:secrets/credentials.xml 包含敏感信息,传输与存储需加密,恢复后验证凭据可用性。

0