svn遷移(由windows visualsvn遷移至linux subversion)
dayi_123 2018-09-04 17:16:33 3860 收藏 4
分類專欄: 版本管理與持續內建 文章标簽: svn遷移 subversion svn安裝與管理 svn主從同步
版權
版本管理與持續內建
專欄收錄該内容
3 篇文章0 訂閱
訂閱專欄
最近由于公司使用的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協定管理
2、svn服務的安裝
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
[/]
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
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”中加入同步指令即可。
————————————————
版權聲明:本文為CSDN部落客「dayi_123」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。
原文連結:https://blog.csdn.net/dayi_123/article/details/82386982