天天看點

從svn伺服器自動同步到另一台伺服器

開發機為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腳本了。

好了,大概就是這個樣子,希望對你有幫助。

繼續閱讀