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

環境: A機器192.168.1.10  做爲SVN的服務端     (環境 apache svn ssh) php

環境: B機器 192.168.1.20    (環境 nginx php ssh svn 做爲客戶端) nginx

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

環境搭建: shell

A機器apache+svn環境的配置. http://my.oschina.net/denglz/blog/89183 apache

配置好之後svn的基礎功能(檢出/更新 等)已經能夠實現了!  vim

主要的配置文件有 安全

httpd.conf: apache的配置文件須要添加svn模塊. bash

authz.conf: 版本庫的權限控制文件! 服務器

passwd.conf: svn用戶的密碼文件! ssh

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機器上版本庫的位置

[root@A /]# ls /data/svn/    #/data/svn 是版本庫的主目錄
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用戶名

[root@A /]# cat /data/svn/passwd.conf
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機器,

參考http://blog.csdn.net/lin_fs/article/details/7309714   寫的很詳細!  #

實現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的權限!!!!

相關文章
相關標籤/搜索