备份与恢复 #
本节介绍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