天天看點

svn利用鈎子腳本功能實作代碼同步到web目錄

一、hook簡單介紹

    為了友善管理者控制送出的過程 ,subversion提供了hook機制。當特定的 事件發生時,相應的 hook會被調用,hook其實就相當于特定事件的處理函數。每個hook會得到與它所處理的事件相關的參數,根據 hook的傳回值,subversion會決定是否繼續目前的送出過程

    要實際安裝一個可用的鈎子,你需要在 repos/hooks目錄下安裝一些與鈎子同名(如 start-commit或者post-commit)的可執行程式或腳本。

二、本地機器svn自動更新

1. export方式(備份)

    在使用svn用戶端時,有可能需要對某一個版本進行本地備份,比如制作成壓縮包進行釋出,這時候需要從svn檔案夾中提取出内容,去除.svn等隐藏的svn配置檔案。最笨的方法拷貝一份出來,然後顯示隐藏檔案,把所有

.svn檔案夾都删掉。在svn菜單中,可以找到export指令,這個指令可以将目前svn目錄中的内容幹淨地導出到指定的目錄

    例如你版本庫的svn通路位址是http://10.30.11.12:8080/svn/project1,你想把這個版本庫下的/trunk/web檔案夾釋出到tomcat上,釋出到tomcat的檔案夾位址是d:/tomcat/opt/web,svn的管理者使用者名是abc,密碼是12345,那麼這個鈎子程式應該就是:

svn export http://10.30.11.12:8080/svn/project1/trunk/web  d:/tomcat/opt/web --force --username abc --password 12345 --no-auth-cache

注:

--force 是說強制覆寫d:/tomcat/opt/web這個檔案夾,避免這個檔案夾不為空時報錯

--username abc --password 12345 是自動将使用者名和密碼作為參數傳送進去

--no-auth-cache 是說不緩存使用者名和密碼,這是出于安全考慮

2.update方式

修改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不然會報錯!!

預設使用的shell類型是sh,最好改成bash,sh是bash的子集,centos中sh其實就是軟連結到bash

svn利用鈎子腳本功能實作代碼同步到web目錄

3.update和export比較

    update會生成一個隐藏.svn檔案夾,這個檔案夾是我們不需要的,當然了,如果整個釋出的内容很多的話,建議還是用update,而不用export,因為update隻更新有變化的部分,而export将重新導出所有内容,網絡消耗比update大。

三、svn實作遠端機器自動更新

首先實作a機器通過ssh無密碼登陸b機器, 修改a機器的post-commit檔案

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

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

/usr/bin/svn update /web/root/code  

版本庫有送出請求的時候自動會執行post-commit腳本,post-commit腳本通過ssh讓遠端機器執行shell腳本自動更新svn。

附注:

@echo off并不是dos程式中的,

而是dos批進行中的。

當年的dos,所有操作都用鍵盤指令來完成,

當你每次都要輸入相同的指令時,

可以把這麼多指令存為一個批處理,

從此以後,隻要運作這個批處理,

就相當于打了幾行、幾十行指令。

dos在運作批處理時,

會依次執行批進行中的每條指令,

并且會在顯示器上顯示,

如果你不想讓它們顯示,

可以加一個“echo off”

當然,“echo off”也是指令,

它本身也會顯示,

如果連這條也不顯示,

就在前面加個“@”。

說了這麼多,

我覺得非常詳細了,

可能你還是不懂。

沒有經過dos時代的人,

想法跟我們是有差別的。

繼續閱讀