GitLab定时备份
GitLab基础环境
部署方式:Docker
版本:16.2.2
备份命令
Notes:
- 编写
sh
脚本时,不要使用Windows上的Notepad++类似编辑器,执行时可能会出现语法错误,直接通过touch
和vim
命令编辑即可 - 注意赋予可执行权限:
chmod +x gitlab_backup.sh
gitlab_backup.sh
#! /bin/bash
docker exec gitlab gitlab-rake gitlab:backup:create
自动清理备份
gitlab_delete.sh
#! /bin/bash
find /home/data/apps/gitlab/data/backups/ -type f -mtime +7 -name "*.tar" -exec rm -rf {} \;
寻找并删除 /home/data/apps/gitlab/data/backups/目录下内容修改时间(mtime)为7天以前的tar文件(-type f),并删除(rm -rf)
上传命令
备份后需要将文件传送至其他服务器。
Notes:
- 通过
scp
命令实现远程复制,可以设置ssh公钥实现免密登录远端服务器,设置步骤参考最后链接。 - 复制前要保证远端服务器已经存在指定的目录
gitlab_upload.sh
#! /bin/bash
backdir='/home/data/apps/gitlab/data/backups'
latestFileName=`ls $backdir -t|head -n 1`
cd "$backdir"
scp "$latestFileName" root@172.xxx.xxx.xx:/data/apps/gitlab/backups
ssh root@172.xxx.xxx.xx "find /data/apps/gitlab/backups -type f -mtime +7 -exec rm -f {} \;"
设置定时任务
crontab -e
10 0 * * * /data/gitlab/cron/gitlab_backup.sh > /tmp/cron.log 2>&1
20 0 * * * /data/gitlab/cron/gitlab_upload.sh > /tmp/cron.log 2>&1
30 0 * * * /data/gitlab/cron/gitlab_delete.sh > /tmp/cron.log 2>&1
每天的零点10分自动备份,零点20分自动将最新备份文件上传至远端服务器,零点30分自动删除7天前的备份