Linux下SVN配置hook經驗總結

前幾天給實驗室搭建了一個內部測試的開發環境,LAMP、svn提交以及自動部署。web

以前沒幹過這事兒,到最終搞定仍是頗費了些周折。總結一下個人經驗,主要是hook的自動執行問題。svn

拿個人post-commit 腳原本說,如下是示例代碼:post

#!/bin/sh
SVN=/usr/bin/svn
WEB=/var/www/testsite
LOG=/home/svn/testsite/hooks/code_deploy_log
export LANG=zh_CN.UTF-8
CURDATE=`date`
echo "Code Deployed at $CURDATE" >> $LOG
$SVN update --username ×××× --password ×××× $WEB >> $LOG
chmod -R 777 $WEB >> $LOG

首先是腳本頭部,在Ubuntu下不須要聲明,而在CentOS下須要聲明,參考當前目錄下的 .tmpl模板文件測試

而後是其中所涉及的命令可能須要寫上絕對路徑spa

能夠用命令調試

whereis commond

查看該命令的絕對路徑。日誌

若是你是用我這種方法實現自動部署的,那麼提交代碼以前須要在你的部署環境下co一次,post-commit腳本纔可能順利執行。code

不過,調試過程當中沒有那麼順利,日誌文件中有顯示日期,說明腳本順利執行了,不過並無真正update到web目錄。server

緣由是這樣的,你若是用可登陸賬戶執行update系統會詢問你是否保存密碼,而在後臺運行的svn可沒有這個交互機會,因而你須要給svnserve指定一個運行用戶,並修改該用戶的配置文件讓其不自動保存密碼。開發

例如:

su - root -c "svnserve -d -r /home/svn"

是以root用戶deamon模式並設置 /home/svn 爲根目錄啓動svn服務
這樣只須要修改root用戶目錄下,修改 .subversion/servers 文件以下兩行(即去掉默認前面的註釋)

store-passwords = no
store-plaintext-passwords = no

post-commit腳本就能順利執行了!

相關文章
相關標籤/搜索