1. 程式人生 > >linux搭建svn服務並手動同步程式碼到web目錄和自動更新

linux搭建svn服務並手動同步程式碼到web目錄和自動更新

1.安裝svn服務端

yum -y install subversion

2.檢視安裝路徑等資訊

rpm -ql subversion

3.檢視svn幫助資訊

svn help

4.建立svn版本庫目錄(這是個大庫,裡面用svnadmin建立的才是各個專案的庫)

mkdir /home/svnDB

5.建立版本庫(專案)

mkdir /home/svnDB/test/

svnadmin create /home/svnDB/test/

6.配置版本庫

進入/home/svnDB/test/conf,裡面有三個檔案

authz檔案是許可權控制檔案

passwd是帳號密碼檔案

svnserve.conf SVN服務配置檔案

(1)在passwd檔案的[users]塊中新增使用者名稱和密碼:賬號=密碼,例如username=password

(2)在authz的末尾增加

[/]

username=rw

(*=)這個是其他的都沒有讀寫許可權,前面的才有

(3)在svnserve.conf

去掉四個個的前面的#號,如下

anon-access = none(匿名使用者設定為none,這樣才能看到日誌資訊,否則日誌顯示nodate)

auth-access = write #授權使用者可以寫

password-db = passwd #使用passwd作為賬號檔案

authz-db = authz #使用authz作為許可權檔案

ps:注意,前面不能有空格

7.啟動svn服務,這裡啟動大倉庫

svnserve -d -r /home/svnDB

8.客戶端安裝這裡略過,直接進入服務端的更新到web目錄

svn co svn://你的ip 你想放在那個目錄(這樣的建立到web目錄如果更新可以在那個目錄下直接svn update,但是有svn的隱藏檔案)

svn export svn://你的ip 你想放在哪個目錄(這樣的web目錄沒有svn隱藏檔案,但是不能直接用svn update更新,推薦上面的)

9.使用鉤子進行svn自動更新到web目錄

(1)、cd  /home/svnDB/test/hooks/ 

(2)、cp cp post-commit.tmpl post-commit (複製這份模板檔案,因為svn將要執行的是post-commit檔案)

(3)、vim post-commit 

將最後面幾行刪除

REPOS="$1"
REV="$2"
mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf

============================================================

然後加上自己將要執行的同步的命令

export LANG=zh_CN.UTF-8  #(這句話比較重要,如果客戶端跟伺服器編碼不一樣會出現同步失敗)
WEB=你的web目錄  #(將要同步過去的web專案路徑)
/usr/bin/svn update $WEB  #(/usr/bin/svn代表你的svn服務檔案地址 如果是通過yum安裝的話,或者已經註冊了svn服務,則可以直接使用svn,不需要輸入全路徑)

wq!儲存退出,此時已經完成更新命令

===========================================================================================================================

設定post-commit檔案可以執行許可權(若不設定則會出現commit false 255錯誤)

chmod  a+x  post-commit  (或者chmod  777 post-commit)

10.將svn設定開機啟動

找個地方寫個指令碼,svnserve命令最好用絕對路徑,可用which svnserve查詢,如我的在/usr/bin/svnserve

指令碼內容如:

#!/bin/bash

/usr/bin/svnserve -d -r /home/svnDB

儲存之後加入到開機啟動檔案那裡

11.設定分組和目錄許可權

我們開發的時候是多人,多人可能屬於一個組,有些組許可權大,有些組許可權小

開啟配置檔案authz,在[groups]區寫上分組資訊,如

g48=akb,ske,nmb

other=mike,tom

然後許可權配置

[/]

@g48=rw(以@開頭就是指這個組,這裡/指所有的倉庫的所有目錄都有rw許可權)

[test:/controllers]

@other=rw(這裡是test倉庫下的controllers資料夾有rw許可權,這個組checkout專案的時候地址就是svn://ip地址/test/controllers)

設定這些許可權之後還要對應的去passwd檔案設定帳號密碼,然後重啟svn

12.開啟修改日誌許可權

只要將檔案hooks目錄下的pre-revprop-change.tmpl改名為pre-revprop-change,並加上執行許可權即可。

不過這樣所有人都可以修改,還能修改其他人的日誌

 

  1. 建立svn目錄
    mkdir /home/svn   //在home目錄下建立svn 資料夾
    
    svnadmin create /home/svn/test //建立svn版本倉庫 test

    建立完畢以後,在svn目錄下你會看到test目錄,test目錄詳細詳細如下


    下面是這些目錄的詳細講解

    在本文章主要是配置svn的資訊以及如何同步程式碼,所以涉及的目錄只有conf目錄以及hooks目錄,下面,我們開始講解如何配置svn

  3.配置svn的基本資訊

  1. cd ./conf //進入配置資料夾

  
  authz  檔案是建立svn組和組使用者的許可權
  passwd  設定組中使用者的賬號和密碼 
  svnserve.conf 配置版本庫資訊和使用者檔案和使用者密碼檔案的路徑、版本庫路徑
  (如果是多個倉庫通過相同許可權,賬號和密碼控制,可以將authz,passwd檔案放到svn目錄下)

  (1)authz 配置svn組和組使用者的許可權

[group]
test = user1,user2 //建立test使用者組,並新增user1 user2使用者

[/]    //指定根目錄先的許可權
@test = rw  //設定test組的許可權為可讀可寫

  (2)passwd 配置使用者密碼

[users]

user1 = 12345678   //使用者名稱就是組新增成員是的使用者     
user2 = 12345677

  (3)svnserve.conf 配置版本庫資訊和使用者檔案和使用者密碼檔案的路徑、版本庫路徑

[general]
anon-access = none        //其他人不可讀取
auth-access = write         //設定authz中使用者的許可權為可寫
password-db = passwd     //指向自己passwd檔案
authz-db = authz             //指向authz檔案
realm = /home/svn/test

  以上就是配置svn的許可權,使用者賬戶密碼以及倉庫路徑

  此時,你需要將svn重啟,重啟方式以下

ps -ax | grep svn    //查出svn程序

kill -9 ******    //通過kill -9方式殺死程序 *****是對應的pid

svnserve -d -r /home/svn //啟動svn服務,當然你如果是想啟動具體的倉庫,可以將路徑寫的更加詳細一點

  4.使用post-commit 實現同步程式碼

  程式碼同步需要使用到hooks檔案目錄下的post-commit勾子檔案,在hooks下很多tmpl檔案,這些檔案都是勾子的模板來的,
  如果需要使用的時候copy 一份去掉.tmpl字尾便可使用

  (1)生成一個新的有效的勾子檔案post-commit

cp post-commit.tpml post-commit
chmod 777 post-commit //設定post-commit 檔案的許可權 切記這步一定不可漏,不然後期執行時會報錯

  這樣就會生成一個有效的post-commit 檔案

  (2)同步程式碼操作

#!/bin/sh
export LANG=en_US.UTF-8
SVN_PATH=/usr/bin/svn
WEB_PATH=/data/wwwroot/default/test    //test目錄就行你的專案的目錄
$SVN_PATH update $WEB_PATH --username user1 --password 12345678    //切記--username --password 是兩個-

  (3)進入伺服器目錄,將專案checkout 出來

svn co svn://localhost/test/  /data/wwwroot/default/test --username user1 --password 12345678

 這樣子你的程式碼同步功能已經實現了

 5.客戶端使用

  你只需下載個 tortoiseSVN 小烏龜然後將test倉庫拉取下來,然後將程式碼放入倉庫資料夾中,通過新增檔案方式add 後再commit ,你的專案就會同步到伺服器中
  

 6.我遇到的那些錯誤

  1.首先客戶端連線svn伺服器錯誤,之所以會連線失敗,是因為我的防火牆並沒有開啟3690(svn預設埠),你只需開啟即可
  不會請看這個連結 http://www.linuxidc.com/Linux/2012-09/70785.htm

  2.同步失敗  是因為post-commit檔案的許可權原因,你只需將許可權設定大於755即可

  3.提示**** is a direcitory /usr/bin/svn你把這個搞錯了,他不是一個目錄,是svn的路徑