環境:CentOS6.5 測試線 svn和web服務器在同一台機器上 SVN版本1.6
情景:在測試環境下,開發部提出希望提交到SVN的代碼能自動同步到WEB站點目錄下,解決每次都要傳雙份這一問題,尤其是頻繁更新后的繁瑣,浪費了大量時間。
思路:通過搜索,查到svn的hooks目錄的觸發功能,該目錄下有許多模板,其中一個是post-commit.tmpl,意為“提交后執行”,通過這個功能我們可以將提交代碼后要做的事寫到里面來執行。
步驟:
1. 首先導出一份svn的文件到網站目錄
# svn co file:///data/svn/php/ /data/wwwroot/
注:file:///data/svn/php/ 表示php的svn代碼在該Linux系統中的系統路徑。
2. 修改“提交后執行文件”post-commit.tmpl
# cd /data/svn/php/hooks
# mv post-commit.tmpl post-commit
# chmod +x post-commit
# cat post-commit
#!/bin/sh SVN=/usr/bin/svn WEB=/data/wwwroot LOG_PATH=/tmp/svn_hook.log echo "------------Start Commit -----------" >> $LOG_PATH echo "Time:"`date '+%Y-%m-%d %T'`>>$LOG_PATH export LANG='zh_CN.UTF-8' #防止亂碼 for DIR in `svnlook dirs-changed /data/svn/php/` do $SVN update $WEB/$DIR done chown -R www.www /data/wwwroot
備注:由於文件太多太大,第一次做的時候SVN和WEB不在同一台機器,而且沒有進行提交優化,所以SVN提交后巨卡(10秒到30秒)!
筆者在此文中寫的已是進行了兩步優化后的結果,優化的內容為以下兩點:
① 將SVN和WEB放到了同一台機器,比提交后觸發rsync有所加快,並且不依賴網絡。
② 通過“svnlook dirs-changed 網站目錄”,打印出SVN更新了哪些目錄,svn update只針對這些目錄,節省了全局掃描浪費掉的時間!
優化后平均提交后響應時間在3秒內!