gerrit代码简单备份方案分享
时间:2022-04-23
本文章向大家介绍gerrit代码简单备份方案分享,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
由于前期部署了gerrit代码审核系统,开发调整后的线上代码都放到gerrit上,这就要求我们要保证代码的安全。所以,对gerrit代码的备份至关重要!
备份的策略是: 1)先首次将gerrit项目代码git clone下来,然后后续备份前进行git pull 2)编写备份脚本,crontab定时执行 3)除了本机备份外,还可以备份到远程
下面是操作记录:
比如,备份gerrit上的下列项目代码
查看各个项目的gerrit代码下载地址(ssh方式)
1)首先在本地将gerrit项目代码下载下来(本地的wangshibo用户下的公钥已经放到gerrit上,在wangshibo用户下git clone)
[root@115r gerrit.bak]# su - wangshibo
[root@115r gerrit.bak]$ pwd
/home/wangshibo/gerrit.bak
[root@115r gerrit.bak]$ git clone ssh://wangshibo@103.110.186.130:29418/huanqiu_ios && scp -p -P 29418 wangshibo@103.110.186.130:hooks/commit-msg huanqiu_ios/.git/hooks/
[root@115r gerrit.bak]$ git clone ssh://wangshibo@103.110.186.130:29418/huanqiu_android && scp -p -P 29418 wangshibo@103.110.186.130:hooks/commit-msg fangfull_huanqiu/.git/hooks/
[root@115r gerrit.bak]$ git clone ssh://wangshibo@103.110.186.130:29418/huanqiu_old_android && scp -p -P 29418 wangshibo@103.110.186.130:hooks/commit-msg huanqiu_old_android/.git/hooks/
[root@115r gerrit.bak]$ git clone ssh://wangshibo@103.110.186.130:29418/huanqiu_old_ios && scp -p -P 29418 wangshibo@103.110.186.130:hooks/commit-msg huanqiu_old_ios/.git/hooks/
[root@115r gerrit.bak]$ git clone ssh://wangshibo@103.110.186.130:29418/static-huanqiu && scp -p -P 29418 wangshibo@103.110.186.130:hooks/commit-msg static-huanqiu/.git/hooks/
[root@115r gerrit.bak]$ ll
总用量 32
drwxr-xr-x. 5 wangshibo wangshibo 4096 9月 14 13:10 huanqiu_ios
drwxr-xr-x. 5 wangshibo wangshibo 4096 8月 24 09:49 huanqiu_android
drwxr-xr-x. 4 wangshibo wangshibo 4096 8月 24 09:49 huanqiu_old_android
drwxr-xr-x. 4 wangshibo wangshibo 4096 8月 24 09:49 huanqiu_old_ios
drwxr-xr-x. 10 wangshibo wangshibo 4096 8月 29 11:29 static-huanqiu
[root@115r gerrit.bak]$ cd huanqiu_old_ios/
[root@115r huanqiu_old_ios]$ git branch -av //查看发现git分支也已经下载下来了
* master fd4c4f6 90
remotes/origin/HEAD -> origin/master
remotes/origin/dev a5bdc2c 提交客户resetCookie
remotes/origin/huanqiu_old_ios e00aa7e DEL:rm readme file into fangfull_old_ios
remotes/origin/master fd4c4f6 90
[root@115r gerrit.bak]$ cat /home/wangshibo/gerrit-bak.sh
#!/bin/bash
cd /home/wangshibo/gerrit.bak/huanqiu_android && /usr/local/bin/git pull
cd /home/wangshibo/gerrit.bak/huanqiu_ios && /usr/local/bin/git pull
cd /home/wangshibo/gerrit.bak/huanqiu_old_android && /usr/local/bin/git pull
cd /home/wangshibo/gerrit.bak/huanqiu_old_ios && /usr/local/bin/git pull
cd /home/wangshibo/gerrit.bak/static-huanqiu && /usr/local/bin/git pull
然后crontab计划任务制定,每小时备份一次
[root@Zabbix-server gerrit.bak]$ crontab -l
10 * * * * /bin/bash -x /home/wangshibo/gerrit-bak.sh > /dev/null 2>&1
2)第一步只是在本地备份,可以将本地备份的git做副本放到远程机器上
下面是远程机器上的操作(远程机器已和本地机器做了ssh信任关系)(192.168.1.15是本地机器)
[root@bastion-IDC ~]# cd /home/backup/
[root@bastion-IDC backup]# ls
192.168.1.15-gerrit gerritbak.sh
[root@bastion-IDC backup]# cat gerritbak.sh
#/bin/bash
/usr/bin/rsync -e "ssh -p22" -avpgolr wangshibo@192.168.1.15:/home/wangshibo/gerrit.bak /home/backup/192.168.1.15-gerrit/`date +gerrit-%Y-%m-%d`/
[root@bastion-IDC backup]# cd 192.168.1.15-gerrit/
[root@bastion-IDC 192.168.1.15-gerrit]# ls
gerrit-2016-9-17
[root@bastion-IDC 192.168.1.15-gerrit]# cd gerrit-2016-9-17/
[root@bastion-IDC gerrit-2016-9-17]# ls
gerrit.bak
[root@bastion-IDC gerrit-2016-9-17]# ll gerrit.bak
total 32
drwxr-xr-x. 5 512 512 4096 Aug 24 09:49 huanqiu_android
drwxr-xr-x. 4 512 512 4096 Aug 24 09:49 huanqiu_ios
drwxr-xr-x. 4 512 512 4096 Aug 24 09:49 huanqiu_old_android
drwxr-xr-x. 4 512 512 4096 Aug 24 09:49 huanqiu_old_ios
drwxr-xr-x. 10 512 512 4096 Aug 29 11:29 static-huanqiu
[root@bastion-IDC 192.168.1.15-gerrit]# cd huanqiu_old_ios/
[wangshibo@bastion-IDC huanqiu_old_ios]$ git branch -av //查看,说明git分支也已经备份下来了
* master fd4c4f6 90
remotes/origin/HEAD -> origin/master
remotes/origin/dev a5bdc2c 提交客户resetCookie
remotes/origin/huanqiu_old_ios e00aa7e DEL:rm readme file into fangfull_old_ios
remotes/origin/master fd4c4f6 90
制定计划任务,每30分钟备份过来一次
[root@bastion-IDC backup]# crontab -l
*/30 * * * * /bin/bash -x /home/backup/gerritbak.sh > /dev/null 2>&1
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Go by Example 中文版: 时间戳
- Day14.模块&包
- 关于 JavaScript 错误处理的最完整指南(下半部)
- 踩坑记录 | Android 逆向之如何处理 Kali Nat 模式无法上网?
- gson 替换 fastjson 引发的线上问题分析
- P1003 铺地毯
- 花10分钟写一个 Python 脚本,搞定了初中老师一个下午的工作
- 微信小程序导航栏页面滑动切换
- SwiftUI:本地通知
- 领导大怒:建表不加主键的都是耍流氓
- (美团)巧用数组下标,轻轻松松找出所有元素
- Docker容器网络-基础篇
- 【Java面试总结】常用框架之Spring
- 【学以致用】C++操作Redis
- 商业鬼才教你 工厂方法 && 抽象工厂 模式