如何在Ubuntu上备份Jenkins
备份Jenkins是保障持续集成/持续部署(CI/CD)流程连续性的关键步骤,能有效防止配置丢失、数据损坏或系统故障导致的工作中断。以下是Ubuntu环境下备份Jenkins的详细方法,涵盖手动、自动化及插件辅助等多种方案:
手动备份是最直接的备份方式,适用于临时性或少量数据的备份场景,核心是复制Jenkins主目录(/var/lib/jenkins
)下的关键文件/目录。
sudo systemctl stop jenkins
tar
命令将/var/lib/jenkins
目录打包为压缩文件(包含配置、作业、插件等所有数据),并通过--exclude
参数排除无需备份的临时文件(如日志、缓存):sudo tar -czvf jenkins_backup_$(date +%Y%m%d).tar.gz --exclude=/var/lib/jenkins/logs/* --exclude=/var/lib/jenkins/plugins/*.tmp /var/lib/jenkins
sudo cp jenkins_backup_$(date +%Y%m%d).tar.gz /mnt/external_drive/jenkins_backups/
sudo systemctl start jenkins
注意:手动备份需人工介入,适合备份频率较低的场景(如每周一次)。
通过cron
定时任务实现自动化备份,确保定期执行备份操作,减少人为遗漏。
/usr/local/bin/backup_jenkins.sh
脚本,内容如下(包含时间戳、备份目录及自动清理旧备份):#!/bin/bash
BACKUP_DIR="/mnt/backups/jenkins" # 备份存储目录(需提前创建)
JENKINS_HOME="/var/lib/jenkins"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="$BACKUP_DIR/jenkins_backup_$TIMESTAMP.tar.gz"
# 创建备份目录
mkdir -p "$BACKUP_DIR"
# 打包Jenkins主目录(排除临时文件)
tar -czvf "$BACKUP_FILE" --exclude="$JENKINS_HOME/logs/*" --exclude="$JENKINS_HOME/plugins/*.tmp" "$JENKINS_HOME"
# 删除7天前的备份(保留最近7天)
find "$BACKUP_DIR" -name "jenkins_backup_*.tar.gz" -type f -mtime +7 -exec rm -rf {} \;
echo "[$(date)] Jenkins backup completed: $BACKUP_FILE" >> "$BACKUP_DIR/backup.log"
赋予脚本执行权限:sudo chmod +x /usr/local/bin/backup_jenkins.sh
crontab -e
),添加以下行(每天凌晨2点执行备份):0 2 * * * /usr/local/bin/backup_jenkins.sh
保存后,cron会自动按计划执行备份。ThinBackup是Jenkins官方推荐的备份插件,支持增量备份、定时备份、备份过滤(排除无需备份的文件),并能通过Web界面管理备份,操作便捷。
/mnt/backups/jenkins_thin
);0 3 * * *
表示每天凌晨3点执行);/logs/
、/tmp/
)。若Jenkins配置了数据库(如SQLite、MySQL),需额外备份数据库文件,确保配置数据不丢失。
/var/lib/jenkins/jenkins.db
):sudo cp /var/lib/jenkins/jenkins.db /mnt/backups/jenkins_db/
mysqldump
导出数据库:mysqldump -u jenkins_user -p jenkins_db > /mnt/backups/jenkins_db/backup_$(date +%Y%m%d).sql
输入密码后,数据库会被导出为SQL文件。备份的目的是为了恢复,以下是常见恢复场景的操作步骤:
/var/lib/jenkins
目录→解压备份文件到该目录→重启服务:sudo systemctl stop jenkins
sudo rm -rf /var/lib/jenkins/*
sudo tar -xzvf /mnt/backups/jenkins_backups/jenkins_backup_20250920.tar.gz -C /var/lib/jenkins
sudo systemctl start jenkins
jobs/<job_name>
目录复制到/var/lib/jenkins/jobs/
下即可:sudo cp -r /mnt/backups/jenkins_backups/jobs/my_job /var/lib/jenkins/jobs/
sudo systemctl restart jenkins
mysql
命令导入SQL文件:mysql -u jenkins_user -p jenkins_db < /mnt/backups/jenkins_db/backup_20250920.sql
logs/
、tmp/
等临时目录,减少备份体积;