备份与恢复 #

本节介绍Jenkins数据备份和恢复的方法,确保数据安全和业务连续性。

需要备份的内容 #

text
JENKINS_HOME/
├── config.xml           # 全局配置
├── credentials.xml      # 凭据(加密)
├── jobs/                # 任务配置
│   └── job-name/
│       ├── config.xml
│       └── builds/
├── users/               # 用户数据
├── plugins/             # 插件
├── secrets/             # 密钥
└── workspace/           # 工作空间(可选)

备份策略 #

完全备份 #

bash
#!/bin/bash
BACKUP_DIR="/backup/jenkins"
DATE=$(date +%Y%m%d_%H%M%S)
JENKINS_HOME="/var/lib/jenkins"

tar -czf ${BACKUP_DIR}/jenkins-full-${DATE}.tar.gz ${JENKINS_HOME}

find ${BACKUP_DIR} -name "jenkins-full-*.tar.gz" -mtime +7 -delete

增量备份 #

bash
#!/bin/bash
BACKUP_DIR="/backup/jenkins"
DATE=$(date +%Y%m%d_%H%M%S)
JENKINS_HOME="/var/lib/jenkins"

rsync -av --delete ${JENKINS_HOME}/ ${BACKUP_DIR}/jenkins-incremental/

配置备份 #

bash
#!/bin/bash
BACKUP_DIR="/backup/jenkins-config"
DATE=$(date +%Y%m%d_%H%M%S)
JENKINS_HOME="/var/lib/jenkins"

tar -czf ${BACKUP_DIR}/jenkins-config-${DATE}.tar.gz \
    ${JENKINS_HOME}/config.xml \
    ${JENKINS_HOME}/credentials.xml \
    ${JENKINS_HOME}/jobs/*/config.xml \
    ${JENKINS_HOME}/users/*/config.xml \
    ${JENKINS_HOME}/plugins/*.jpi

使用插件备份 #

ThinBackup插件 #

text
安装插件: Thin Backup

Manage Jenkins → ThinBackup

配置:
  Backup directory: /backup/jenkins
  Backup schedule: H 2 * * *
  Backup retention: 7 days
  ☑ Backup plugin archives
  ☑ Backup userContent

备份配置 #

text
Manage Jenkins → ThinBackup → Settings

Backup directory: /backup/jenkins
Backup schedule for full backups: H 2 * * *
Backup schedule for differential backups: H 3 * * *
Number of backup sets to keep: 7
☑ Wait until Jenkins/Hudson is idle to backup
☑ Backup build results
☑ Backup build archives
☑ Backup userContent
☑ Backup next build number file
☑ Clean up differential backups

定时备份 #

Cron定时任务 #

bash
# /etc/cron.d/jenkins-backup

# 每天凌晨2点完全备份
0 2 * * * jenkins /opt/scripts/jenkins-backup.sh

# 每小时增量备份
0 * * * * jenkins /opt/scripts/jenkins-incremental-backup.sh

备份脚本 #

bash
#!/bin/bash
# /opt/scripts/jenkins-backup.sh

set -e

BACKUP_DIR="/backup/jenkins"
DATE=$(date +%Y%m%d_%H%M%S)
JENKINS_HOME="/var/lib/jenkins"
LOG_FILE="/var/log/jenkins-backup.log"

log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') $1" >> ${LOG_FILE}
}

log "Starting backup..."

mkdir -p ${BACKUP_DIR}

tar -czf ${BACKUP_DIR}/jenkins-${DATE}.tar.gz ${JENKINS_HOME}

find ${BACKUP_DIR} -name "jenkins-*.tar.gz" -mtime +7 -delete

log "Backup completed: jenkins-${DATE}.tar.gz"
log "Size: $(du -h ${BACKUP_DIR}/jenkins-${DATE}.tar.gz | cut -f1)"

云存储备份 #

AWS S3 #

bash
#!/bin/bash
BACKUP_FILE="/backup/jenkins/jenkins-$(date +%Y%m%d).tar.gz"
S3_BUCKET="s3://jenkins-backup"

tar -czf ${BACKUP_FILE} /var/lib/jenkins

aws s3 cp ${BACKUP_FILE} ${S3_BUCKET}/

Azure Blob Storage #

bash
#!/bin/bash
BACKUP_FILE="/backup/jenkins/jenkins-$(date +%Y%m%d).tar.gz"
CONTAINER="jenkins-backup"

tar -czf ${BACKUP_FILE} /var/lib/jenkins

az storage blob upload \
    --container-name ${CONTAINER} \
    --file ${BACKUP_FILE} \
    --name jenkins-$(date +%Y%m%d).tar.gz

恢复方法 #

完全恢复 #

bash
# 停止Jenkins
systemctl stop jenkins

# 恢复数据
tar -xzf jenkins-backup.tar.gz -C /

# 启动Jenkins
systemctl start jenkins

部分恢复 #

bash
# 恢复单个任务配置
tar -xzf jenkins-backup.tar.gz \
    var/lib/jenkins/jobs/my-job/config.xml \
    -C /

# 恢复凭据
tar -xzf jenkins-backup.tar.gz \
    var/lib/jenkins/credentials.xml \
    -C /

ThinBackup恢复 #

text
Manage Jenkins → ThinBackup → Restore

选择备份文件
点击 Restore
重启Jenkins

灾难恢复 #

恢复计划 #

text
1. 准备新的Jenkins服务器
2. 安装相同版本的Jenkins
3. 恢复备份数据
4. 启动并验证
5. 切换流量

恢复脚本 #

bash
#!/bin/bash
BACKUP_FILE=$1
JENKINS_HOME="/var/lib/jenkins"

if [ -z "$BACKUP_FILE" ]; then
    echo "Usage: $0 <backup-file>"
    exit 1
fi

echo "Stopping Jenkins..."
systemctl stop jenkins

echo "Restoring backup..."
rm -rf ${JENKINS_HOME}/*
tar -xzf ${BACKUP_FILE} -C /

echo "Setting permissions..."
chown -R jenkins:jenkins ${JENKINS_HOME}

echo "Starting Jenkins..."
systemctl start jenkins

echo "Restore completed!"

验证备份 #

定期验证 #

bash
#!/bin/bash
BACKUP_FILE="/backup/jenkins/jenkins-latest.tar.gz"

echo "Verifying backup..."

tar -tzf ${BACKUP_FILE} | head -n 10

if [ $? -eq 0 ]; then
    echo "Backup is valid"
else
    echo "Backup is corrupted!"
    exit 1
fi

恢复测试 #

text
定期在测试环境进行恢复测试:
1. 每月进行一次完整恢复测试
2. 验证数据完整性
3. 验证功能正常

最佳实践 #

1. 定期备份 #

text
- 每日完全备份
- 每小时增量备份
- 保留多个版本

2. 异地备份 #

text
- 备份到云存储
- 多地域存储
- 防止单点故障

3. 加密备份 #

bash
tar -czf - /var/lib/jenkins | gpg -c > jenkins-backup.tar.gz.gpg

4. 监控备份 #

text
- 监控备份任务状态
- 设置备份失败告警
- 定期检查备份大小

5. 文档化 #

text
记录:
- 备份策略
- 恢复步骤
- 联系方式

下一步学习 #

小结 #

  • 定期备份JENKINS_HOME目录
  • 使用多种备份策略
  • 异地存储备份文件
  • 定期验证备份有效性
  • 文档化恢复流程
最后更新:2026-03-28