文章目录
-
- 背景
- [1. 安装配置 FileZilla Server(Windows)](#1. 安装配置 FileZilla Server(Windows))
-
- [1.1 下载并安装 FileZilla Server](#1.1 下载并安装 FileZilla Server)
- [1.2 配置 FTP 用户和共享目录](#1.2 配置 FTP 用户和共享目录)
- [2. 安装并配置 FTP 客户端(CentOS)](#2. 安装并配置 FTP 客户端(CentOS))
-
- [2.1 在 CentOS 安装 lftp](#2.1 在 CentOS 安装 lftp)
- [3. 编写 Jenkins 备份脚本](#3. 编写 Jenkins 备份脚本)
-
- [3.1 赋予执行权限](#3.1 赋予执行权限)
- [3.2 测试执行](#3.2 测试执行)
- [4. 配置定时任务(Crontab)](#4. 配置定时任务(Crontab))
-
- [4.1 编辑 Crontab 任务](#4.1 编辑 Crontab 任务)
- [4.2 重启 Crontab 服务(适用于部分系统)](#4.2 重启 Crontab 服务(适用于部分系统))
- [4.3 确认定时任务是否生效](#4.3 确认定时任务是否生效)
- [5. 可能遇到的问题及解决方案](#5. 可能遇到的问题及解决方案)
-
- [5.1 脚本执行时报](#5.1 脚本执行时报)
- [5.2 权限问题](#5.2 权限问题)
- [5.3 FTP 连接失败](#5.3 FTP 连接失败)
- [6. 总结](#6. 总结)
背景
在 CentOS 上搭建了 Jenkins 服务,为了防止意外丢失数据,我们需要定期备份 Jenkins 数据。本方案采用 FileZilla Server 作为 FTP 服务器,并使用 lftp 进行数据同步。
1. 安装配置 FileZilla Server(Windows)
在 Windows 上安装并配置 FileZilla Server 以接收 Jenkins 备份数据。
1.1 下载并安装 FileZilla Server
- 下载 FileZilla Server 0.9.60.2 中文安装版
- 安装并启动 FileZilla Server,弹出配置窗口:
- 主机 :
localhost
- 密码:留空,直接连接
- 主机 :
1.2 配置 FTP 用户和共享目录
- 添加用户(用于 CentOS 连接 FTP 服务器上传文件)
- 设置共享目录 ,假设目录路径为
F:\FileZillaServer
,用于存放备份数据。
最终,FTP 服务器上的 Jenkins 备份目录路径为:
F:\FileZillaServer\jenkins_home
2. 安装并配置 FTP 客户端(CentOS)
2.1 在 CentOS 安装 lftp
bash
sudo yum update -y # 更新系统(CentOS 7/8)
sudo yum install -y lftp
3. 编写 Jenkins 备份脚本
在 CentOS 服务器上创建 backup_jenkins_ftp.sh
,用于定期同步 Jenkins 数据到 FTP 服务器。
sh
#!/bin/bash
# FTP 配置
FTP_HOST="xxx.22.212.xx"
FTP_USER="autotest"
FTP_PASS="autotest"
FTP_TARGET_DIR="jenkins_home" # Windows FTP 服务器上的目标目录(映射到 F:\FileZillaServer\jenkins_home)
# Jenkins 数据目录(CentOS)
SOURCE_DIR="/var/jenkins_home"
# 日志文件
LOG_FILE="/var/log/jenkins_ftp_backup.log"
# 使用 lftp 进行文件同步
lftp -u $FTP_USER,$FTP_PASS $FTP_HOST <<EOF
set ftp:ssl-allow no # 如果 FTP 服务器不支持 SSL,则禁用 SSL
mirror -R $SOURCE_DIR $FTP_TARGET_DIR # 递归同步 Jenkins 目录到 FTP 服务器
quit
EOF
# 记录日志
if [ $? -eq 0 ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') - 备份成功" >> $LOG_FILE
else
echo "$(date '+%Y-%m-%d %H:%M:%S') - 备份失败" >> $LOG_FILE
fi
3.1 赋予执行权限
bash
chmod +x backup_jenkins_ftp.sh
3.2 测试执行
bash
sudo ./backup_jenkins_ftp.sh
4. 配置定时任务(Crontab)
为了实现自动备份,我们使用 crontab
定时执行脚本。
4.1 编辑 Crontab 任务
bash
crontab -e
添加以下任务,每天凌晨 2 点执行备份:
0 2 * * * /home/xxx/jenkins/backup_jenkins_ftp.sh
4.2 重启 Crontab 服务(适用于部分系统)
bash
sudo systemctl restart crond
4.3 确认定时任务是否生效
bash
crontab -l
5. 可能遇到的问题及解决方案
5.1 脚本执行时报
'': command not found
该问题通常是由于脚本文件包含 Windows 换行符 (\r\n
),而 Linux 只支持 \n
造成的。
解决方法:转换文件格式
bash
dos2unix backup_jenkins_ftp.sh
如果 dos2unix
未安装,可用 sed
命令处理:
bash
sed -i 's/\r$//' backup_jenkins_ftp.sh
5.2 权限问题
若执行时遇到权限不足的错误,可尝试:
bash
sudo chmod +x backup_jenkins_ftp.sh
sudo chmod 666 /var/log/jenkins_ftp_backup.log
5.3 FTP 连接失败
-
检查 FTP 服务器是否开启
bashtelnet 172.22.212.25 21
如果连接失败,需检查 Windows 上 FileZilla Server 是否正常运行。
-
检查防火墙是否开放 21 端口
bashsudo firewall-cmd --add-port=21/tcp --permanent sudo firewall-cmd --reload
6. 总结
通过以上步骤,我们完成了 Jenkins 备份到 Windows FTP 服务器的自动化流程,主要包括:
- 在 Windows 上安装 FileZilla Server 作为 FTP 服务器。
- 在 CentOS 上安装 lftp 并编写同步脚本。
- 配置 Crontab 实现每日自动备份。
- 处理常见问题,确保备份流程稳定运行。
🎯 至此,Jenkins 数据将每日自动备份至 Windows FTP 服务器,确保数据安全可靠! 🚀
Reference:FileZilla Server/Client 的简单使用-CSDN博客