svn遷移(由windows visualsvn遷移至linux subversion)

    最近由於公司使用的visual svn服務所在的windows主機經常出現自動重啓故障,導致開發人員在提交代碼時經常提交失敗。鑑於此,決定將svn由windows的visualsvn遷移至Linux主機下的subversion軟件搭建的svn主機上。

一、linux系統svn服務器的搭建

1、安裝環境準備工作

系統 centos7.5   內存:4g   cpu: 2核    硬盤大小:250g

Subversion版本:1.7.14(yum方式安裝)

httpd版本:2.4.6(yum安裝)

ip地址:192.168.1.117

安裝完成後svn server既可以通過svn協議管理,也可通過http協議管理

2svn服務的安裝

yum install httpd subversion mod_dav_svn

3、創建項目

創建項目時使用”svnadmin create”命令創建

#創建svn服務數據存放目錄及配置文件存放目錄
mkidr /data/{svndata,etc}
# 創建一個項目
Svnadmin create /data/svndata/data1

4、配置svn

    當創建一個svn倉庫時,默認的當前倉庫的配置在當前倉庫的conf目錄下,主要的配置文件有權限管理配置文件”authz”,密碼配置文件”passwd”,svn服務配置文件”svnserve.conf”。

    當存在多個項目時,爲了方便管理及授權,可以通過配置”svnserve.conf”將密碼及授權配置文件制定到統一的目錄下。

svnserve.conf配置如下:

[general]
anon-access = none 
auth-access = write
password-db = /data/etc/svn-user.conf
authz-db = /data/etc/svn-authz.conf
realm = system

    anon-access表示匿名用戶的權限,值有:read write none

    auth-access表示認證用戶的權限,值有:read write none

    password-db表示用戶名及密碼文件存放位置

    authz-db權限分配文件的存放位置

    realm爲登錄提示信息

 

/data/etc/svn-user.conf配置如下

[users]
liuyi = liuyi
dayi123 = dayi123

     前面一個字段爲用戶名,後面一個字段爲密碼,密碼爲明文的形式。

 

/data/etc/svn-user.conf文件配置如下:

[groups]
dev = dayi123,dayi
[system:/]
liuyi = rw
@dev = rw
[reps2:/]
liaoxb = rw

    如果有多個用戶訪問同一個項目時,可以定義一個組,將用戶添加到組下,再將此項目權限授予組。

5、配置通過http管理svn

(1)創建支持svn的httpd配置文件

# httpd服務的配置文件如下:
]# cat /etc/httpd/conf.d/subversion.conf 
LoadModule dav_svn_module     modules/mod_dav_svn.so 
LoadModule authz_svn_module   modules/mod_authz_svn.so 
<Location /svn>
  DAV svn
  SVNParentPath /data/svndata
  AuthType Basic
  AuthName "dev.chinatvpay.com"
  AuthUserFile /data/etc/passwd
  AuthzSVNAccessFile /data/etc/authz
  Require valid-user
</Location>

(2)創建使用http協議的用戶密碼文件並創建用戶

    通過基於http協議和基於svn協議的用戶是互不相關的,如果想讓一個用戶能同時通過兩種方式管理svn,需要通過兩種方式添加用戶。Httpd服務的認證文件存放路徑存放在httpd的配置文件中,其中”AuthUserFile”爲認證文件的存放路徑。” AuthzSVNAccessFile”爲權限管理文件存放路徑。

# 創建用戶密碼文件並設置密碼,第一次創建時加”-c”選項,以後創建不能加”-c”選項,不然文件可能會被覆蓋
]# htpasswd –c /web/svn/passwd dayi123
# 查看創建的用戶及密碼
]# cat etc/passwd 
liuyi:$apr1$G8CzDQYV$.0FQccOaPQ9PHDFZWQNKH0

(3)創建基於http協議訪問的用戶的授權文件

# 文件路勁爲http配置中指定的路徑
]# cat /data/etc/authz 
[/]
liuyi = rw
dayi123 = rw

(4)對svn目錄授權,使能通過http操作

# 修改svn數據目錄的權限及所有者
]# chmod 755 /data/svndata -R
]# chown apache:apache /data/svndata -R

6、啓動svn

#啓動svnserver
]# svnserve -d -r /data/svndata
# 啓動httpd服務
]# systemctl start httpd

二、svn服務器的遷移

1、在Linux服務上創建svn倉庫

    在Linux服務上依據window visualsvn上存在的倉庫名稱創建倉庫。

# 創建所有的倉庫
]# svnadmin create /data/svndata/system
]# svnadmin create /data/svndata/code
]# svnadmin create /data/svndata/codebase
]# svnadmin create /data/svndata/dev
]# svnadmin create /data/svndata/devlop
]# svnadmin create /data/svndata/public
]# svnadmin create /data/svndata/outdev

2、將windows上的visualsvn上的所有倉庫導出

     Linuxsvn安裝完成後,需要將windows svn上的倉庫導出,拷貝到linux svn機器上上,再從linux svn上導入。Windows倉庫的導出是通過再cmd窗口中執行命令導出的。

    導出命令:svnadmin dump “原倉庫路徑” >  “備份的文件路徑”  

    在windows上導出svn倉庫時,如果svn倉庫較大且存在多個svn倉庫時時,由於導出時間較長,可將所有的導出命令寫入到bat腳本中,通過運行bat腳本導出。導出腳本內容如下:

svnadmin dump “D:\data\svndata\system” > D:\backup\system.dump
svnadmin dump “D:\data\svndata\code” > D:\backup\code.dump
svnadmin dump “D:\data\svndata\codebase” > D:\backup\codebase.dump
svnadmin dump “D:\data\svndata\dev” > D:\backup\svndata.dump
svnadmin dump “D:\data\svndata\devlop” > D:\backup\svndata.dump
svnadmin dump “D:\data\svndata\public” > D:\backup\svndata.dump
svnadmin dump “D:\data\svndata\outdev” > D:\backup\outdev.dump

3、將svn倉庫備份在linux svn上導入

     將svn倉庫導出後,拷貝到linux svn機器上,可通過sftp或ftp上傳值linux svn主機。上傳後導入到創建好的相應倉庫裏

    導入命令:svnadmin load “倉庫路徑” < “備份文件路徑”

    導入時也可通過shell腳本導入,腳本內容如下

#!/bin/bash
svnadmin load /data/svndata/system < /data/backup/system.dump
svnadmin load /data/svndata/code < /data/backup/code.dump
svnadmin load /data/svndata/codebase < /data/backup/codebase.dump
svnadmin load /data/svndata/dev < /data/backup/dev.dump
svnadmin load /data/svndata/devlop < /data/backup/devlop.dump
svnadmin load /data/svndata/public < /data/backup/public.dump
svnadmin load /data/svndata/outdev < /data/backup/outdev.dump

4、用戶遷移

     Svn倉庫數據遷移完成後需要對用戶進行遷移,由於windows服務器上的visualsvn使用的用戶爲域用戶,無法完成對用戶的遷移,所以只能使用手動添加創建。Windows svn權限的配置文件也是通過用戶的id配置的,無法配置,只能重新分配。

三、建立svn主從同步

   爲了提高svn的高可用性,防止svn服務器出現故障,需要爲svn服務器搭建一個備用的svn server,讓主svn實時將代碼的提交更新同步到備用svn上,已完成svn服務的高可用。

1、環境準備

    Svn備機環境準備如下:

    系統 centos7.5   內存:4g   cpu: 2核    硬盤大小:250g

    Subversion版本:1.7.14(yum方式安裝)

    httpd版本:2.4.6(yum安裝)

    ip地址:192.168.1.118

     在svn server備機上,創建同主svn上相同的庫安裝相同的服務;建立用於同步數據的用戶(基於svn協議的賬號),用戶需對所有的倉庫有讀寫權限。svn賬號權限統一在/data/etc/下統一分配管理。

2、配置同步

    在備庫的每個倉庫的hooks目錄下建立名稱爲”pre-revprop-change”的文件,並賦予執行權限。

# pre-revprop-change內容如下
]# cat pre-revprop-change
exit 0
# 給此文件賦予執行權限
]# chmod 755 pre-revprop-change

3、同步文件

     同步操作均在主svn上操作

    在同步數據前先要對svn做初始化,初始化完成後再進行第一次同步,通過初始化緩存下主備svn的用戶及密碼等相關信息,同步時不再需要輸入用戶名密碼。初始化的命令爲:”svnsync init 目標svn鏈接  源svn鏈接”。

# 對兩臺svn的所有倉庫先做初始化,第一個初始化的倉庫需要輸入主機密碼及svn用戶密碼
svnsync init svn://192.168.1.118/system svn://192.168.1.117/system
svnsync init svn://192.168.1.118/code svn://192.168.1.117/code
svnsync init svn://192.168.1.118/codebase svn://192.168.1.117/codebase
svnsync init svn://192.168.1.118/dev svn://192.168.1.117/dev
svnsync init svn://192.168.1.118/devlop svn://192.168.1.117/devlop
svnsync init svn://192.168.1.118/public svn://192.168.1.117/public
svnsync init svn://192.168.1.118/outdev svn://192.168.1.117/outdev

    在初始化完成後,就可以同步數據了,如果數據量大,第一次同步數據比較耗時,可以將同步命令寫入腳本內去執行:

]# cat svnrsync.sh
#!/bin/bash
svnsync sync svn://192.168.1.118/system
svnsync sync svn://192.168.1.118/code
svnsync sync svn://192.168.1.118/codebase
svnsync sync svn://192.168.1.118/dev
svnsync sync svn://192.168.1.118/devlop
svnsync sync svn://192.168.1.118/public
svnsync sync svn://192.168.1.118/outdev

    第一次同步完成後,可將同步腳本加入定時任務,定時去執行;如果想讓提交的代碼實時的跟新到備庫中可以在倉庫的hooks目錄下的” post-commit.tmpl”中加入同步命令即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章