天天看點

SVN 使用hooks 自動更新到遠端的web目錄下

環境: A機器192.168.1.10  作為SVN的服務端     (環境 apache svn ssh)

環境: B機器 192.168.1.20    (環境 nginx php ssh svn 作為用戶端)

目的:開發人員上傳代碼到A機器時, 會自動更新到B機器上nginx代理伺服器的web目錄,  以便開發人員直接通路.

環境搭建:

配置好以後svn的基礎功能(檢出/更新 等)已經可以實作了! 

主要的配置檔案有

httpd.conf: apache的配置檔案需要添加svn子產品.

authz.conf: 版本庫的權限控制檔案!

passwd.conf: svn使用者的密碼檔案!

B機器nginx + php 環境的配置. 

php可以用yum安裝能解析就行, nginx安裝很簡單.

--------------------------------------------------------------------------------

下面是A機器環境的具體介紹!

A機器apache配置檔案httpd.conf中svn子產品的内容

<Location /svn>

DAV svn

#SVNListParentPath on

SVNParentPath /data/svn/

SVNListParentPath on

AuthType Basic

AuthName "Subversion repository"

AuthUserFile /data/svn/passwd.conf      #在這裡已經指出了svn使用者密碼檔案的位置

AuthzSVNAccessFile /data/svn/authz.conf  #在這裡已經指出限制版本庫權限檔案的位置

Require valid-user

</Location>

注意!!! 運作apache的使用者是www.

A機器上版本庫的位置

admin  authz.conf  passwd.conf    

#admin是一個版本庫權限是777這樣是不安全的但是友善是以..!    authz.conf 和 passwd.conf 也在 /data/svn目錄裡面! 

A機器使用者的添加

/usr/local/apache2/bin/htpasswd -m /data/svn/passwd.conf  deng使用者名

www:$apr1$1g7Hhl1.....加密......        #添加後的使用者名和密碼在passwd.conf檔案裡.

A機器版本庫的權限設定

[root@ProjectServer /]# cat /data/svn/authz.conf

[admin:/]

deng = rw

環境介紹完畢現在先實作svn在本機上的自動更新吧!

scp /data/svn/admin/hooks/post-commit.tmpl /data/svn/admin/hooks/post-commit   複制一份post-commit    (每當有送出請求的時候都有執行post-commit)

修改vim /data/svn/admin/hooks/post-commit  登出原有的内容!添加如下内容

export LANG=en_US.UTF-8  

SVN=/usr/bin/svn  #必須寫絕對路徑

STATIC_DIR=/web/root/wwwdeng  #注意權限問題

$SVN update  $STATIC_DIR --username deng --password 123456 --no-auth-cache    #必須加上--no-auth-cache不然會報錯!!

還有就是/data/svn/admin/hooks/post-commit 預設使用的shell類型是sh,最好改成bash

這樣就實作了自動更新到本地的 /web/root/wwwdeng目錄了, 看網上好多文章還修改了/data/svn/admin/conf目錄下的三個檔案,這是因為我們用的是apache+ svn 使用者密碼檔案和定義庫權限的檔案在apache配置檔案裡的svn子產品中已經指定了,是以這三個檔案我就不需要在修改了, 他們需要修改是因為她們隻安裝了svn,沒有和apache整合在一起!! (apache和svn整合在一起的使用者名密碼檔案中的密碼是經過加密的!)

注意系統使用者www對post-commit檔案要有可執行權限,并且對/web/root/wwwdeng目錄要有寫的權限!! 注意!!! 運作apache的使用者是www,svn通過apache實作檢出和送出.

svn更新到遠端機器的web目錄下. (實作遠端更新主要用的是ssh無密碼登陸)

首先實作 A機器通過ssh無密碼登陸B機器,

實作ssh無密碼通路後,修改A機器的post-commit檔案   

vim /data/svn/admin/hooks/post-commit   #注釋掉所有内容,隻添加下面一行内容!

/usr/bin/ssh -l root  192.168.127.183 "/bin/bash /home/www/svnup.sh"    #svnup.sh

#post-commit 檔案裡面不僅僅可以寫svn的更新腳本,寫其它的也行!(開始我還以為隻能寫svn的更新指令呢!! 唉.....),

然後在B機器的/home/www/目錄建立svnup.sh可執行檔案

vim /home/www/svnup.sh

/usr/bin/svn update /web/root/code   #就這一行内容!

#整體來說是,如果admin版本庫有送出請求的時候自動會執行post-commit,post-commit可執行檔案通過ssh來讓遠端機器自動更新svn.

主要注意!  post-commit 的權限,和 svnup.sh的權限!!!!

     本文轉自yzy121403725 51CTO部落格,原文連結:http://blog.51cto.com/lookingdream/1831614,如需轉載請自行聯系原作者