前幾天給實驗室搭建了一個內部測試的開發環境,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腳本就能順利執行了!