環境: 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,如需轉載請自行聯系原作者