• 项目案例之GitLab的数据迁移


    项目案例之GitLab的数据迁移

    链接:https://pan.baidu.com/s/1CgaEv12cwfbs5RxcNpxdAg
    提取码:fytm
    复制这段内容后打开百度网盘手机App,操作更方便哦

    5.项目案例一:生产环境SVN数据迁移到测试环境GitLab

    主机名 IP地址 备份 特殊要求
    Git01 192.168.200.52 Git客户端
    Git02 192.168.200.53 GitLab服务器01 内存2G
    SVN 192.168.200.57 SVN服务器

    image.png-73.2kB

    5.1 案例背景

    公司近期对于"版本管理工具是否进行切换SVN-->Git"的问题进行了讨论,于是对svn和git进行了相关研究,进而梳理出了Git的特点(优,缺点),最后将Git与SVN进行了对比,对比结果详细见下方内容。

    image.png-543kB

    image.png-407.5kB

    5.2 部署SVN服务器

    [root@SVN ~]# yum -y install subversion
    [root@SVN ~]# rpm -qa subversion
    subversion-1.7.14-14.el7.x86_64
    
    [root@SVN ~]# mkdir -p /application/svndata/yunjisuan
    [root@SVN ~]# mkdir -p /application/svnpasswd
    [root@SVN ~]# tree /application
    /application
    ├── svndata
    │   └── yunjisuan
    └── svnpasswd
    
    3 directories, 0 files
    
    #创建yunjisuan项目主分支,开发分支,测试分子
    [root@SVN ~]# svnadmin create /application/svndata/yunjisuan/master
    [root@SVN ~]# svnadmin create /application/svndata/yunjisuan/dev
    [root@SVN ~]# svnadmin create /application/svndata/yunjisuan/test
    
    [root@SVN ~]# cd /application/svndata/yunjisuan/master/conf/
    [root@SVN conf]# ls
    authz  passwd  svnserve.conf
    [root@SVN conf]# cp svnserve.conf{,.bak}
    [root@SVN conf]# sed -n '19p;20p;27p;34p' svnserve.conf
    anon-access = none
    auth-access = write
    password-db = /application/svnpasswd/passwd
    authz-db = /application/svnpasswd/authz
    
    #将配置文件覆盖另外两个分支
    [root@SVN conf]# /bin/cp svnserve.conf /application/svndata/yunjisuan/dev/conf/
    [root@SVN conf]# /bin/cp svnserve.conf /application/svndata/yunjisuan/test/conf/
    [root@SVN conf]# cp /application/svndata/yunjisuan/master/conf/authz /application/svnpasswd/
    [root@SVN conf]# cp /application/svndata/yunjisuan/master/conf/passwd /application/svnpasswd/
    [root@SVN conf]# cd /application/svnpasswd/
    [root@SVN svnpasswd]# ls
    authz  passwd
    
    [root@SVN svnpasswd]# vim passwd 
    [root@SVN svnpasswd]# tail -4 passwd 
    yunjisuan = 123123
    benet = 123123
    stu001 = 123
    stu002 = 456
    
    [root@SVN svnpasswd]# vim authz 
    [root@SVN svnpasswd]# egrep -v "#|^$" authz
    [aliases]
    [groups]
    testgroup = stu001,stu002
    [yunjisuan/master:/]      #master主分支代码提交者---开发经理
    yunjisuan = rw
    benet = r
    
    [yunjisuan/dev:/]
    benet = rw                #dev开发分支代码提交者---普通程序员
    yunjisuan = r             #dev开发分支代码下载者---开发经理
    
    [yunjisuan/test:/]
    @testgroup = r            #test测试分支代码下载者----测试人员
    yunjisuan = rw            #test测试分支代码提交者---开发经理
    
    
    [root@SVN svnpasswd]# svnserve -d -r /application/svndata/
    [root@SVN svnpasswd]# ps -ef | grep svn
    root      10649      1  0 09:08 ?        00:00:00 svnserve -d -r /application/svndata/
    root      10651  10566  0 09:08 pts/0    00:00:00 grep --color=auto svn
    

    在宿主机创建三个svn目录checkout代码,如下图

    image.png-23.8kB

    image.png-12.7kB

    image.png-3.1kB

    image.png-31.5kB
    随便在三个目录上传点代码文件

    5.3 利用git-svn克隆svn代码

    特别提示: Yum安装的git没有git-svn功能,要源码安装最新版本

    #在Git01上操作
    #安装git-svn支持程序(没有这两个包git-svn报错)
    [root@Git01 ~]# yum -y install subversion-perl perl-Digest-MD5
    [root@Git01 ~]# rpm -qa subversion-perl perl-Digest-MD5
    subversion-perl-1.7.14-14.el7.x86_64
    perl-Digest-MD5-2.52-3.el7.x86_64
    
    #创建Git工作目录并克隆SVN分支代码到本地
    [root@Git01 ~]# mkdir -p /backup
    [root@Git01 ~]# cd /backup
    
    #将SVN服务器master分支代码克隆到本地Git工作目录
    [root@Git01 backup]# git svn clone --no-metadata svn://192.168.200.57/yunjisuan/master/ /backup/master/
    初始化空的 Git 仓库于 /backup/master/.git/
    Authentication realm: <svn://192.168.200.57:3690> 123e5da4-f346-4cb1-af1c-8511a1b9d2ce
    Password for 'root': 111111           #输入root登陆密码
    Authentication realm: <svn://192.168.200.57:3690> 123e5da4-f346-4cb1-af1c-8511a1b9d2ce
    Username: yunjisuan                   #输入svn的master分支的授权账户名
    Password for 'yunjisuan': 123123      #输入svn的master分支的授权账户密码
    	A	master测试文件.txt
    r1 = c45d2c0a60369c2703f6791f74c88cafe127ae1b (refs/remotes/git-svn)
    Checked out HEAD:
      svn://192.168.200.57/yunjisuan/master r1
    [root@Git01 backup]# ls
    master
    [root@Git01 backup]# cd master/
    [root@Git01 master]# ls
    master测试文件.txt
    [root@Git01 master]# cat master测试文件.txt 
    welcome to yunjisuan
    
    #将SVN服务器dev分支代码克隆到本地Git工作目录
    [root@Git01 master]# git svn clone --no-metadata svn://192.168.200.57/yunjisuan/dev/ /backup/dev/
    初始化空的 Git 仓库于 /backup/dev/.git/
    Authentication realm: <svn://192.168.200.57:3690> 6ab3b7d8-6315-4c00-bca9-b53840a155ae
    Password for 'root': 111111    #输入root登陆密码
    Authentication realm: <svn://192.168.200.57:3690> 6ab3b7d8-6315-4c00-bca9-b53840a155ae
    Username: benet                #输入svn的dev分支的授权账户名
    Password for 'benet': 123123   #输入svn的dev分支的授权账户密码
    	A	dev测试文件 .txt
    r1 = 1d061e53f74e53a6a2170138e7446328b38b8159 (refs/remotes/git-svn)
    Checked out HEAD:
      svn://192.168.200.57/yunjisuan/dev r1
    [root@Git01 backup]# ls
    dev  master
    [root@Git01 backup]# cd dev/
    [root@Git01 dev]# ls
    dev测试文件 .txt
    [root@Git01 dev]# cat dev测试文件 .txt 
    welcome to yunjisuan
    
    #将SVN服务器test分支代码克隆到本地Git工作目录
    [root@Git01 backup]# git svn clone --no-metadata svn://192.168.200.57/yunjisuan/test/ /backup/test/
    初始化空的 Git 仓库于 /backup/test/.git/
    Authentication realm: <svn://192.168.200.57:3690> afe84583-3f5a-405b-a345-34e530f9c9e3
    Password for 'root': 111111          #输入root登陆密码
    Authentication realm: <svn://192.168.200.57:3690> afe84583-3f5a-405b-a345-34e530f9c9e3
    Username: yunjisuan                  #输入svn的test分支的授权账户名
    Password for 'yunjisuan': 123123     #输入svn的test分支的授权账户密码
    	A	test测试文件 .txt
    r1 = 3b6d1e30144fbc8989191bebf7c74042c8939132 (refs/remotes/git-svn)
    Checked out HEAD:
      svn://192.168.200.57/yunjisuan/test r1
    [root@Git01 backup]# ls
    dev  master  test
    [root@Git01 backup]# cd test/
    [root@Git01 test]# ls
    test测试文件 .txt
    [root@Git01 test]# cat test测试文件 .txt 
    welcome to yunjisuan
    
    [root@Git01 backup]# ls
    dev  master  test
    [root@Git01 backup]# tree
    .
    ├── dev
    │   └── dev346265213350257225346226207344273266 .txt
    ├── master
    │   └── master346265213350257225346226207344273266.txt
    └── test
        └── test346265213350257225346226207344273266 .txt
    
    3 directories, 3 files
    

    在GitLab上创建一个组,在组里添加3个成员(主程序员,开发者,报告者)
    GitLab默认情况下,master分支是受到保护的(只能主程序员推送和合并)

    • 主程序员=产品经理:推送和合并受保护分支
    • 开发者=开发人员:推送不受保护分支
    • 报告者=测试人员:只能clone代码
      在GitLab这个组里创建一个项目叫做Demo
      通过主程序员账号将从SVN克隆下来的master分支,dev分支,test分支的代码推送到Demo项目里。分支名称不变

    image.png-71.1kB

    image.png-44.6kB

    [root@Git01 backup]# ls
    dev  master  test
    [root@Git01 backup]# cd master/
    [root@Git01 master]# ls
    master测试文件.txt
    [root@Git01 master]# git remote add origin http://192.168.200.53:8888/test/demo.git
    
    #将master目录代码推送到GitLab仓库的Demo项目里
    [root@Git01 master]# git push -u origin master
    Username for 'http://192.168.200.53:8888': root
    Password for 'http://root@192.168.200.53:8888': 
    对象计数中: 3, 完成.
    Delta compression using up to 2 threads.
    压缩对象中: 100% (2/2), 完成.
    写入对象中: 100% (3/3), 253 bytes | 0 bytes/s, 完成.
    Total 3 (delta 0), reused 0 (delta 0)
    To http://192.168.200.53:8888/test/demo.git
     * [new branch]      master -> master
    分支 master 设置为跟踪来自 origin 的远程分支 master。
    
    #将dev目录代码推送到GitLab仓库的Demo项目里
    [root@Git01 master]# cd /backup/dev
    [root@Git01 dev]# git remote add origin http://192.168.200.53:8888/test/demo.git
    
    [root@Git01 dev]# git branch
    * master
    [root@Git01 dev]# git branch dev
    [root@Git01 dev]# git checkout dev
    切换到分支 'dev'
    [root@Git01 dev]# git branch
    * dev
      master
    [root@Git01 dev]# ls
    dev测试文件 .txt
    [root@Git01 dev]# git add *
    [root@Git01 dev]# git commit -m "开发分支代码提交"
    位于分支 dev
    nothing to commit, working tree clean
    
    
    [root@Git01 dev]# git push -u origin dev
    Username for 'http://192.168.200.53:8888': root
    Password for 'http://root@192.168.200.53:8888': 
    对象计数中: 3, 完成.
    写入对象中: 100% (3/3), 244 bytes | 0 bytes/s, 完成.
    Total 3 (delta 0), reused 0 (delta 0)
    remote: 
    remote: To create a merge request for dev, visit:
    remote:   http://192.168.200.53:8888/test/demo/merge_requests/new?merge_request%5Bsource_branch%5D=dev
    remote: 
    To http://192.168.200.53:8888/test/demo.git
     * [new branch]      dev -> dev
    分支 dev 设置为跟踪来自 origin 的远程分支 dev。
    
    #将test目录代码推送到GitLab仓库的Demo项目里
    [root@Git01 dev]# cd /backup/test/
    [root@Git01 test]# git remote add origin http://192.168.200.53:8888/test/demo.git
    
    [root@Git01 test]# git branch
    * master
    [root@Git01 test]# git branch test
    [root@Git01 test]# git checkout test
    切换到分支 'test'
    [root@Git01 test]# git branch
      master
    * test
    [root@Git01 test]# git add *
    nothing to commit, working tree clean
    [root@Git01 test]# git config --global user.email "1773464408@qq.com"
    [root@Git01 test]# git config --global user.name "Mr.yang"
    [root@Git01 test]# git commit -m "测试分支代码提交"
    位于分支 test
    nothing to commit, working tree clean
    
    
    [root@Git01 test]# git push -u origin test
    Username for 'http://192.168.200.53:8888': root
    Password for 'http://root@192.168.200.53:8888': 
    对象计数中: 3, 完成.
    写入对象中: 100% (3/3), 252 bytes | 0 bytes/s, 完成.
    Total 3 (delta 0), reused 0 (delta 0)
    remote: 
    remote: To create a merge request for test, visit:
    remote:   http://192.168.200.53:8888/test/demo/merge_requests/new?merge_request%5Bsource_branch%5D=test
    remote: 
    To http://192.168.200.53:8888/test/demo.git
     * [new branch]      test -> test
    分支 test 设置为跟踪来自 origin 的远程分支 test。
    

    image.png-78.6kB

    6.项目案例二:测试环境GitLab数据迁移到生产环境GitLab

    6.1 案例背景

    前段时间,在某台CentOS服务器上搭建了GitLab环境,并且其他开发组的同仁都陆陆续续把代码从svn迁移到了GitLab,但是之前的CentOS服务器并不是搭建在公司的机房环境,而是搭建在办公室的某台闲置的电脑上,因此为了保证数据安全性,领导要求将之前的GitLab数据全部重新迁移到公司机房的服务器上去。

    主机名 IP地址 备份 特殊要求
    Git01 192.168.200.52 GitLab服务器01 内存2G
    Git02 192.168.200.53 GitLab服务器02 内存2G

    6.2 GitLab的数据备份

    6.2.1 创建备份文件

    首先,我们得把老服务器上的Gitlab整体备份,使用Gitlab一键安装包安装Gitlab非常简单,同样的备份恢复与迁移也非常简单。使用一条命令即可创建完整的Gitlab备份。

    gitlab-rake gitlab:backup:create

    使用以上命令会在/var/opt/gitlab/backups目录下创建一个名称类似为1537115457_2018_09_17_11.2.3_gitlab_backup.tar的压缩包,这个压缩包就是Gitlab整个的完整部分,其中开头1537115457_2018_09_17是备份创建的日期,11.2.3是Gitlab的版本号


    • /etc/gitlab/gitlab.rb配置文件需要备份
    • /var/opt/gitlab/nginx/conf nginx配置文件
    • /etc/postfix/main.cf postfix 邮件配置备份
    [root@Git02 ~]# cd /var/opt/gitlab/backups
    [root@Git02 backups]# ls
    
    #执行命令生成备份压缩包
    [root@Git02 backups]# gitlab-rake gitlab:backup:create
    #以下省略。。。
    
    #查看备份包
    [root@Git02 backups]# ls
    1540035121_2018_10_20_11.2.3_gitlab_backup.tar
    [root@Git02 backups]# ll
    总用量 92
    -rw------- 1 git git 92160 10月 20 19:32 1540035121_2018_10_20_11.2.3_gitlab_backup.tar
    

    6.2.2 更改Gitlab备份目录

    GitLab配置文件路径:/etc/gitlab/gitlab.rb

    [root@Git02 ~]# mkdir -p /backup
    #修改如下配置文件
    [root@Git02 backup]# vim /etc/gitlab/gitlab.rb
    [root@Git02 ~]# cat -n /etc/gitlab/gitlab.rb | sed -n '299p'
       299	gitlab_rails['backup_path'] = "/backup"
    
    #重载GitLab配置文件
    [root@Git02 ~]# gitlab-ctl reconfigure
    
    #再次进行备份尝试
    [root@Git02 ~]# cd /backup/
    [root@Git02 backup]# ls
    [root@Git02 backup]# gitlab-rake gitlab:backup:create
    #以下省略。。。
    [root@Git02 backup]# ls
    1540036570_2018_10_20_11.2.3_gitlab_backup.tar
    

    6.2.3 GitLab的自动备份

    将命令写成定时任务,每天凌晨两点执行一次备份操作

    6.2.4 设置备份过期时间

    设置只保存最近7天的备份,编辑/etc/gitlab/gitlab.rb配置文件,找到如下配置并修改

    [root@Git02 backup]# vim /etc/gitlab/gitlab.rb
    [root@Git02 backup]# cat -n /etc/gitlab/gitlab.rb | sed -n '307p'
       307	gitlab_rails['backup_keep_time'] = 604800
    [root@Git02 backup]# gitlab-ctl reconfigure
    

    6.3 copy老服务器上面的备份文件到新服务器

    6.3.1 确保新GitLab服务器和老GitLab服务器版本相同

    在G01上和G02上都部署同版本的GitLab服务器

    6.3.2 copy老服务器上面的备份文件到新服务器

    [root@Git02 backup]# cd /backup/
    [root@Git02 backup]# ls
    1540036570_2018_10_20_11.2.3_gitlab_backup.tar
    
    [root@Git02 backup]# scp 1540036570_2018_10_20_11.2.3_gitlab_backup.tar root@192.168.200.52:/root/
    root@192.168.200.52's password: 111111
    1540036570_2018_10_20_11.2.3_gitlab_backup.tar                             100%   90KB   1.0MB/s   00:00
    

    6.4 从备份数据中恢复GitLab

    6.4.1 将备份文件权限修改为777

    第一步:将备份文件权限修改为777,不然可能恢复的时候会出现权限不够,不能解压的问题。

    #将拷贝过来的备份文件移动到新GitLab的备份目录下
    [root@Git01 ~]# mv 1540036570_2018_10_20_11.2.3_gitlab_backup.tar /var/opt/gitlab/backups/
    [root@Git01 ~]# cd /var/opt/gitlab/backups/
    [root@Git01 backups]# ls
    1540036570_2018_10_20_11.2.3_gitlab_backup.tar
    
    #给备份文件增加777权限
    [root@Git01 backups]# chmod 777 1540036570_2018_10_20_11.2.3_gitlab_backup.tar 
    [root@Git01 backups]# ll 1540036570_2018_10_20_11.2.3_gitlab_backup.tar 
    -rwxrwxrwx 1 root root 92160 10月 20 20:03 1540036570_2018_10_20_11.2.3_gitlab_backup.tar
    

    6.4.2 执行命令停止相关数据连接服务

    第二步:执行命令停止相关数据连接服务

    #停止相关数据连接服务
    [root@Git01 ~]# gitlab-ctl stop unicorn
    ok: down: unicorn: 3s, normally up
    
    [root@Git01 ~]# gitlab-ctl stop sidekiq
    ok: down: sidekiq: 0s, normally up
    

    6.4.3 执行命令从备份文件中恢复GitLab

    第三步:执行命令从备份文件中恢复GitLab
    gitlab-rake gitlab:backup:restore BACKUP=备份文件编号

    #执行命令恢复数据
    [root@Git01 ~]# gitlab-rake gitlab:backup:restore BACKUP=1540036570_2018_10_20_11.2.3
    
    说明:恢复过程中出现两个(yes/no),输入两个yes即可
    
    6.4.4 重新启动GitLab

    第四步:启动GitLab

    [root@Git01 ~]# gitlab-ctl start
    ok: run: alertmanager: (pid 2758) 9649s
    ok: run: gitaly: (pid 1129) 10493s
    ok: run: gitlab-monitor: (pid 1144) 10489s
    ok: run: gitlab-workhorse: (pid 1122) 10495s
    ok: run: logrotate: (pid 10709) 3252s
    ok: run: nginx: (pid 1124) 10495s
    ok: run: node-exporter: (pid 1138) 10492s
    ok: run: postgres-exporter: (pid 1143) 10489s
    ok: run: postgresql: (pid 1113) 10496s
    ok: run: prometheus: (pid 1151) 10487s
    ok: run: redis: (pid 1108) 10496s
    ok: run: redis-exporter: (pid 1160) 10479s
    ok: run: sidekiq: (pid 13190) 1s
    ok: run: unicorn: (pid 13197) 0s
    

    6.4.5 进行Web访问检查

    image.png-68.1kB

    最终我们发现,两台GitLab除了IP和端口不同外,项目内容完全一致

  • 相关阅读:
    Java解析XML汇总
    java百度地图api轨迹
    java百度地图api轨迹
    javascript百度和高德地图api轨迹回放
    javascript百度和高德地图api轨迹回放
    偷影子的人
    偷影子的人
    SharePoint 2010 的企业级搜索技术文章
    Export Farm Solution wsp Files SharePoint 2007 and 2010
    Configuring My Site in SharePoint 2010
  • 原文地址:https://www.cnblogs.com/ywb123/p/11228049.html
Copyright © 2020-2023  润新知