SVN-GitLab數據遷移

SVN-GitLab數據遷移node

1、生產環境SVN數據遷移到測試環境GitLab

主機名nginx

IP地址git

備份程序員

特殊要求redis

SVNsql

192.168.200.188vim

SVN服務器安全

服務器

Git01app

192.168.200.186

Git客戶端

Git02

192.168.200.187

GitLab服務器01

內存2G

1.1 Git與SVN對比:優缺點

1.2 部署SVN服務器

1.[root@SVN ~]# yum -y install subversion 2.[root@SVN ~]# mkdir -p /application/svndata/yunjisuan 3.[root@SVN ~]# mkdir -p /application/svnpasswd 4. 5.#建立yunjisuan項目主分支,開發分支,測試分子 6.[root@SVN ~]# svnadmin create /application/svndata/yunjisuan/master 7.[root@SVN ~]# svnadmin create /application/svndata/yunjisuan/dev 8.[root@SVN ~]# svnadmin create /application/svndata/yunjisuan/test 9. 10.[root@SVN ~]# cd /application/svndata/yunjisuan/master/conf/
11.[root@SVN conf]# cp svnserve.conf{,.bak} 12.[root@SVN conf]# vim svnserve.conf 13.[root@SVN conf]# sed -n '19p;20p;27p;34p' svnserve.conf 14.anon-access = none 15.auth-access = write 16.password-db = /application/svnpasswd/passwd 17.authz-db = /application/svnpasswd/authz 18. 19.#將配置文件覆蓋另外兩個分支 20.[root@SVN conf]# /bin/cp svnserve.conf /application/svndata/yunjisuan/dev/conf/
21.[root@SVN conf]# /bin/cp svnserve.conf /application/svndata/yunjisuan/test/conf/
22.[root@SVN conf]# cp /application/svndata/yunjisuan/master/conf/authz /application/svnpasswd/
23.[root@SVN conf]# cp /application/svndata/yunjisuan/master/conf/passwd /application/svnpasswd/
24.[root@SVN conf]# cd /application/svnpasswd/
25.[root@SVN svnpasswd]# vim passwd 26.[root@SVN svnpasswd]# tail -4 passwd 27.yunjisuan = 123123
28.benet = 123123
29.stu001 = 123
30.stu002 = 456
31.[root@SVN svnpasswd]# vim authz 32.[root@SVN svnpasswd]# egrep -v "#|^$" authz 33.[aliases] 34.[groups] 35.testgroup = stu001,stu002 36.[yunjisuan/master:/] 37.yunjisuan = rw          #master主分支代碼提交者---開發經理 38.benet = r 39. 40.[yunjisuan/dev:/] 41.benet = rw              #dev開發分支代碼提交者---普通程序員 42.yunjisuan = r           #dev開發分支代碼下載者---開發經理 43. 44.[yunjisuan/test:/] 45.@testgroup = r          #test測試分支代碼下載者----測試人員 46.yunjisuan = rw          #test測試分支代碼提交者---開發經理 47. 48.[root@SVN svnpasswd]# svnserve -d -r /application/svndata/
49.[root@SVN svnpasswd]# ps -ef | grep svn 50.root       1388      1  0 21:59 ?        00:00:00 svnserve -d -r /application/svndata/ root 1390   1225  0 21:59 pts/0    00:00:00 grep --color=auto svn

在宿主機建立三個svn目錄checkout代碼,以下圖

隨便在三個目錄上傳點代碼文件

1.3 利用git-svn克隆svn代碼

特別提示: 
Yum安裝的git沒有git-svn功能,要源碼安裝最新版本

1.#在Git01上操做 2.#安裝git-svn支持程序(沒有這兩個包git-svn報錯) 3.[root@Git01 ~]# yum -y install subversion-perl 4.[root@Git01 backup]# yum -y install perl-Digest-MD5 5. 6.#建立Git工做目錄並克隆SVN分支代碼到本地 7.[root@Git01 ~]# mkdir -p /backup 8.[root@Git01 ~]# cd /backup 9. 10.#將SVN服務器master分支代碼克隆到本地Git工做目錄 11.[root@Git01 backup]# git svn clone --no-metadata svn://192.168.200.188/yunjisuan/master/ /backup/master/
12.初始化空的 Git 倉庫於 /backup/master/.git/
13.Authentication realm: <svn://192.168.200.188:3690> 072f4de9-e153-4bf7-ba81-3d5e5f12c9f7
14.Password for 'root': #輸入root登錄密碼 15.Authentication realm: <svn://192.168.200.188:3690> 072f4de9-e153-4bf7-ba81-3d5e5f12c9f7
16.Username: yunjisuan #輸入svn的master分支的受權帳戶名 17.Password for 'yunjisuan': #輸入svn的master分支的受權帳戶密碼 18. A test.txt 19.r1 = 91d6150e732f2a0191a3609dda47a78592d1406e (refs/remotes/git-svn) 20. D test.txt 21. A testmaster.txt 22.W: -empty_dir: test.txt 23.r2 = 67a5085e0fbc4b2d22a9d381e3b6ad076d2eb31e (refs/remotes/git-svn) 24.Checked out HEAD: 25.  svn://192.168.200.188/yunjisuan/master r2
26. 27. 28.#將SVN服務器dev分支代碼克隆到本地Git工做目錄 29.[root@Git01 backup]# git svn clone --no-metadata svn://192.168.200.188/yunjisuan/dev/ /backup/dev/
30.初始化空的 Git 倉庫於 /backup/dev/.git/
31.Authentication realm: <svn://192.168.200.188:3690> 9149d004-cc0e-48a9-b8a2-3caa58aa2092
32.Password for 'root': #輸入root登錄密碼 33.Authentication realm: <svn://192.168.200.188:3690> 9149d004-cc0e-48a9-b8a2-3caa58aa2092
34.Username: benet #輸入svn的dev分支的受權帳戶名 35.Password for 'benet': #輸入svn的dev分支的受權帳戶密碼 36. A test.txt 37.r1 = b7e184a3080b3f046969f39dbf18a07c367d37a2 (refs/remotes/git-svn) 38. M test.txt 39.r2 = 7e33b02be20bc4244086dcd622a18873f7ea93af (refs/remotes/git-svn) 40. D test.txt 41. A testdev.txt 42.W: -empty_dir: test.txt 43.r3 = 5a3189eeff8b15228c78858c27dabeda6c417940 (refs/remotes/git-svn) 44.Checked out HEAD: 45.  svn://192.168.200.188/yunjisuan/dev r3
46. 47. 48.#將SVN服務器test分支代碼克隆到本地Git工做目錄 49.[root@Git01 backup]# git svn clone --no-metadata svn://192.168.200.188/yunjisuan/test/ /backup/test/
50.初始化空的 Git 倉庫於 /backup/test/.git/
51.Authentication realm: <svn://192.168.200.188:3690> cf8ca014-62dd-4f60-b821-38db9bf1a0d3
52.Password for 'root': #輸入root登錄密碼 53.Authentication realm: <svn://192.168.200.188:3690> cf8ca014-62dd-4f60-b821-38db9bf1a0d3
54.Username: yunjisuan #輸入svn的test分支的受權帳戶名 55.Password for 'yunjisuan': #輸入svn的test分支的受權帳戶密碼 56. A test.txt 57.r1 = b2d971b3c80708c858dffcdd5a542561b677d93f (refs/remotes/git-svn) 58. D test.txt 59. A testtest.txt 60.W: -empty_dir: test.txt 61.r2 = e57f1c1dab5a12df3cda337726bf89382f572135 (refs/remotes/git-svn) 62.Checked out HEAD: 63.  svn://192.168.200.188/yunjisuan/test r2
64. 65.[root@Git01 backup]# ls 66.dev master test 67.[root@Git01 backup]# tree 68.. 69.├── dev 70.│   └── testdev.txt 71.├── master 72.│   └── testmaster.txt 73.└── test 74. └── testtest.txt 75. 76.3 directories, 3 files

GitLab上建立一個組,在組裏添加3個成員(主程序員,開發者,報告者) 
GitLab默認狀況下,master分支是受到保護的(只能主程序員推送和合並) 
主程序員=產品經理:推送和合並受保護分支 
開發者=開發人員:推送不受保護分支 
報告者=測試人員:只能clone代碼 
GitLab這個組裏建立一個項目叫作Demo 
經過主程序員帳號將從SVN克隆下來的master分支,dev分支,test分支的代碼推送到Demo項目裏。分支名稱不變

1.[root@Git01 backup]# ls 2.dev master test 3.[root@Git01 backup]# cd master/
4.[root@Git01 master]# ls 5.testmaster.txt 6.[root@Git01 master]# git remote add origin http://192.168.200.187:8888/test/demo.git
7. 8.#將master目錄代碼推送到GitLab倉庫的Demo項目裏 9.[root@Git01 master]# git push -u origin master 10.Username for 'http://192.168.200.187:8888': 215379068@qq.com 11.Password for 'http://215379068@qq.com@192.168.200.187:8888': 12.對象計數中: 5, 完成. 13.壓縮對象中: 100% (2/2), 完成. 14.寫入對象中: 100% (5/5), 383 bytes | 0 bytes/s, 完成. 15.Total 5 (delta 1), reused 0 (delta 0) 16.To http://192.168.200.187:8888/test/demo.git
17. * [new branch]      master -> master 18.分支 master 設置爲跟蹤來自 origin 的遠程分支 master。 19. 20.#將dev目錄代碼推送到GitLab倉庫的Demo項目裏 21.[root@Git01 master]# cd /backup/dev 22.[root@Git01 dev]# git branch 23.* master 24.[root@Git01 dev]# git branch dev 25.[root@Git01 dev]# git checkout dev 26.切換到分支 'dev'
27.[root@Git01 dev]# git branch 28.* dev 29. master 30.[root@Git01 dev]# ls 31.testdev.txt 32.[root@Git01 dev]# git add *
33.[root@Git01 dev]# git commit -m "開發分支代碼提交"
34. 35.*** Please tell me who you are. 36. 37.Run 38. 39.  git config --global user.email "you@example.com"
40.  git config --global user.name "Your Name"
41. 42.to set your accounts default identity. 43.Omit --global to set the identity only in this repository. 44. 45.fatal: unable to auto-detect email address (got 'root@Git01.(none)') 46.[root@Git01 dev]# git config --global user.email "215379068@qq.com"
47.[root@Git01 dev]# git config --global user.name "Mr.chen"
48.[root@Git01 dev]# git commit -m "開發分支代碼提交"
49.位於分支 dev 50.nothing to commit, working tree clean 51.[root@Git01 dev]# git push -u origin dev 52.Username for 'http://192.168.200.187:8888': 215379068@qq.com 53.Password for 'http://215379068@qq.com@192.168.200.187:8888': 54.對象計數中: 8, 完成. 55.壓縮對象中: 100% (3/3), 完成. 56.寫入對象中: 100% (8/8), 628 bytes | 0 bytes/s, 完成. 57.Total 8 (delta 0), reused 0 (delta 0) 58.remote: 59.remote: To create a merge request for dev, visit: 60.remote:   http://192.168.200.187:8888/test/demo/merge_requests/new?merge_request%5Bsource_branch%5D=dev
61.remote: 62.To http://192.168.200.187:8888/test/demo.git
63. * [new branch]      dev -> dev 64.分支 dev 設置爲跟蹤來自 origin 的遠程分支 dev。 65. 66. 67.#將test目錄代碼推送到GitLab倉庫的Demo項目裏 68.[root@Git01 dev]# cd /backup/test/
69.[root@Git01 test]# git branch 70.* master 71.[root@Git01 test]# git branch test 72.[root@Git01 test]# git checkout test 73.切換到分支 'test'
74.[root@Git01 test]# git add *
75.[root@Git01 test]# git config --global user.email "215379068@qq.com"
76.[root@Git01 test]# git config --global user.name "Mr.chen"
77.[root@Git01 test]# git commit -m "測試分支代碼提交"
78.位於分支 test 79.nothing to commit, working tree clean 80.[root@Git01 test]# git remote add origin http://192.168.200.187:8888/test/demo.git
81.[root@Git01 test]# git push -u origin test 82.Username for 'http://192.168.200.187:8888': 215379068@qq.com 83.Password for 'http://215379068@qq.com@192.168.200.187:8888': 84.對象計數中: 5, 完成. 85.壓縮對象中: 100% (2/2), 完成. 86.寫入對象中: 100% (5/5), 379 bytes | 0 bytes/s, 完成. 87.Total 5 (delta 1), reused 0 (delta 0) 88.remote: 89.remote: To create a merge request for test, visit: 90.remote:   http://192.168.200.187:8888/test/demo/merge_requests/new?merge_request%5Bsource_branch%5D=test
91.remote: 92.To http://192.168.200.187:8888/test/demo.git
93. * [new branch]      test -> test 94.分支 test 設置爲跟蹤來自 origin 的遠程分支 test。

2、測試環境GitLab數據遷移到生產環境GitLab

2.1 案例背景

前段時間,在某臺CentOS服務器上搭建了GitLab環境,而且其餘開發組的同仁都陸陸續續把代碼從svn遷移到了GitLab,可是以前的CentOS服務器並非搭建在公司的機房環境,而是搭建在辦公室的某臺閒置的電腦上,所以爲了保證數據安全性,領導要求將以前的GitLab數據所有從新遷移到公司機房的服務器上去。

主機名

IP地址

備份

特殊要求

Git01

192.168.200.186

GitLab服務器01

內存2G

Git02

192.168.200.187

GitLab服務器02

內存2G

 

2.2 GitLab的數據備份

2.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.3Gitlab的版本號

  • /etc/gitlab/gitlab.rb配置文件須要備份
  • /var/opt/gitlab/nginx/conf nginx配置文件
  • /etc/postfix/main.cf postfix 郵件配置備份
1.[root@Git02 backups]# pwd 2./var/opt/gitlab/backups 3.[root@Git02 backups]# ls 4. 5.#執行命令生成備份壓縮包 6.[root@Git02 backups]# gitlab-rake gitlab:backup:create 7. 8.#查看備份包 9.[root@Git02 backups]# ls 10.1537370009_2018_09_19_11.2.3_gitlab_backup.tar  1537370260_2018_09_19_11.2.3_gitlab_backup.tar 11.[root@Git02 backups]# ll 12.總用量 184
13.-rw------- 1 git git 92160 9月  19 23:13 1537370009_2018_09_19_11.2.3_gitlab_backup.tar 14.-rw------- 1 git git 92160 9月  19 23:17 1537370260_2018_09_19_11.2.3_gitlab_backup.tar #最後一次備份

2.2.2 更改GitLab備份目錄

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

1.[root@Git02 ~]# mkdir -p /backup 2.#修改以下配置文件 3.[root@Git02 ~]# cat -n /etc/gitlab/gitlab.rb.bak | sed -n '299p'
4.   299  # gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
5.[root@Git02 ~]# cat -n /etc/gitlab/gitlab.rb | sed -n '299p'
6.   299  gitlab_rails['backup_path'] = "/backup"
7. 8.#重載GitLab配置文件 9.[root@Git02 ~]# gitlab-ctl reconfigure 10. 11.#再次進行備份嘗試 12.[root@Git02 ~]# cd /backup/
13.[root@Git02 backup]# ls 14.[root@Git02 backup]# gitlab-rake gitlab:backup:create 15.[root@Git02 backup]# ls 16.1537371499_2018_09_19_11.2.3_gitlab_backup.tar

2.2.3 GitLab的自動備份

將命令寫成定時任務,天天凌晨兩點執行一次備份操做

2.2.4 設置備份過時時間

設置只保存最近7天的備份,編輯/etc/gitlab/gitlab.rb配置文件,找到以下配置並修改

1.[root@Git02 ~]# cat -n /etc/gitlab/gitlab.rb.bak | sed -n '307p'
2.   307  # gitlab_rails['backup_keep_time'] = 604800
3.[root@Git02 ~]# cat -n /etc/gitlab/gitlab.rb | sed -n '307p'
4.   307  gitlab_rails['backup_keep_time'] = 604800

2.3 copy老服務器上面的備份文件到新服務器

2.3.1 確保新GitLab服務器和老GitLab服務器版本相同

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

2.3.2 copy老服務器上面的備份文件到新服務器

1.[root@Git02 ~]# cd /backup/
2.[root@Git02 backup]# ls 3.1537371499_2018_09_19_11.2.3_gitlab_backup.tar 4.[root@Git02 backup]# scp 1537371499_2018_09_19_11.2.3_gitlab_backup.tar root@192.168.200.186:/root/
5.root@192.168.200.186's password: 
1537371499_2018_09_19_11.2.3_gitlab_backup.tar                    100%   90KB  23.4MB/s   00:00

2.4 從備份數據中恢復GitLab

2.4.1 將備份文件權限修改成777

第一步:將備份文件權限修改成777,否則可能恢復的時候會出現權限不夠,不能解壓的問題。

1.#將拷貝過來的備份文件移動到新GitLab的備份目錄下 2.[root@Git01 ~]# mv 1537371499_2018_09_19_11.2.3_gitlab_backup.tar /var/opt/gitlab/backups/
3.[root@Git01 ~]# cd /var/opt/gitlab/backups/
4.[root@Git01 backups]# ls 5.1537371499_2018_09_19_11.2.3_gitlab_backup.tar 6. 7.#給備份文件增長777權限 8.[root@Git01 backups]# chmod 777 1537371499_2018_09_19_11.2.3_gitlab_backup.tar 9.[root@Git01 backups]# ll 1537371499_2018_09_19_11.2.3_gitlab_backup.tar 10.-rwxrwxrwx 1 root root 92160 9月  20 22:17 1537371499_2018_09_19_11.2.3_gitlab_backup.tar

2.4.2 執行命令中止相關數據鏈接服務

第二步:執行命令中止相關數據鏈接服務

1.#中止相關數據鏈接服務 2.[root@Git01 ~]# gitlab-ctl stop unicorn 3.ok: down: unicorn: 0s, normally up 4. 5.[root@Git01 ~]# gitlab-ctl stop sidekiq 6.ok: down: sidekiq: 0s, normally up

2.4.3 執行命令從備份文件中恢復GitLab

第三步:執行命令從備份文件中恢復GitLab 
gitlab-rake gitlab:backup:restore BACKUP=備份文件編號

1.#執行命令恢復數據 2.[root@Git01 ~]# gitlab-rake gitlab:backup:restore BACKUP=1537371499_2018_09_19_11.2.3
3. 4.說明: 恢復過程當中出現兩個(yes/no),輸入兩個yes便可

2.4.4 從新啓動GitLab

第四步:啓動GitLab

1.[root@Git01 ~]# gitlab-ctl start 2.ok: run: alertmanager: (pid 30942) 1078s 3.ok: run: gitaly: (pid 30950) 1077s 4.ok: run: gitlab-monitor: (pid 30971) 1077s 5.ok: run: gitlab-workhorse: (pid 30976) 1077s 6.ok: run: logrotate: (pid 30984) 1076s 7.ok: run: nginx: (pid 30991) 1076s 8.ok: run: node-exporter: (pid 30996) 1075s 9.ok: run: postgres-exporter: (pid 31075) 1075s 10.ok: run: postgresql: (pid 31084) 1074s 11.ok: run: prometheus: (pid 31093) 1074s 12.ok: run: redis: (pid 31102) 1073s 13.ok: run: redis-exporter: (pid 31106) 1073s 14.ok: run: sidekiq: (pid 32321) 1s ok: run: unicorn: (pid 32328) 0s

2.4.5 進行Web訪問檢查

兩臺GitLab除了IP和端口不一樣外,項目內容徹底一致

相關文章
相關標籤/搜索