天天看點

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

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