開發機為A,有svn伺服器B,以及線上站點所在伺服器C。因為B硬碟不夠等原因導緻線上網站放在C上,不和svn伺服器放在同一台機器B上。
現在,希望開發機A執行commit代碼後,svn伺服器B上自動同步代碼到C伺服器,使得線上網站自動更新。
大體思路是用post-commit腳本,具體細節上有點麻煩,包括:
下面是具體步驟
但是bash腳本中編寫了ssh登入和svn update更新腳本,發現ssh登入後就不執行後續指令了。
發現expect這個解釋器還是挺好用的,它是一種能夠按照腳本内容裡面設定的方式與互動式程式進行“會話”的程式。不多說,直接編寫需要的腳本:
/var/svnroot/test/hooks/test.exp:
修改權限:
就是去執行剛才的test.exp檔案:
/var/svnroot/test/hooks/post-commit:
post-commit腳本是被apache使用者執行的,那麼腳本中ssh登入語句執行時,會查找/var/www/.ssh路徑下的rsa密鑰,那麼現在來生成它。
建立.ssh目錄
修改apache賬戶為可登入:
找到apache所在行,修改最後面的/sbin/nologin為/bin/bash
用apache賬号登入,生成ssh-key:
測試用apache賬戶用ssh登入
這一步是必須的。因為初次用ssh登入,會提示驗證同意,選擇yes後,以後就不出這個提示了,就能正常執行post-commit腳本了。
好了,大概就是這個樣子,希望對你有幫助。