1. 程式人生 > >Linux下SVN部署Web版本同步

Linux下SVN部署Web版本同步

我們都知道,SVN伺服器端搭建好之後,要先建立版本庫。而版本庫中的檔案都是以加密的方式存在,並不是提交上來的程式碼直接存放的。

因此,就有這樣一個問題,我們希望我們測試好的程式碼提交到SVN伺服器之後,可以不再經過其他的手動操作,而直接看到程式碼在伺服器上的效果,比如web程式碼可以通過url直接看到。

解決方案的原理是這樣,客戶端commit到SVN的程式碼,在伺服器端自動update到web伺服器的程式碼目錄。而Linux下的SVN服務端是提供這樣的機制的,我們每建立一個版本庫的時候注意到,在版本庫目錄下有hook這樣一個資料夾,裡面預設的都是.tmpl這樣的臨時檔案。我們需要做的就是將post-commit.tmpl重新命名為post-commit。這樣,在客戶端出現commit操作的時候,就會觸發這個檔案裡的操作。接下來,我們只需要在post-commit這個檔案中,寫入相應的命令,update到web伺服器程式碼目錄即可。

這樣一來,就實現了,客戶端測試好的程式碼提交到伺服器之後,可以直接通過web伺服器看到效果。

示例:

1、建立svn伺服器版本庫

mkdir /usr/local/svn
svnadmin create /usr/local/svn/testsvn

2、配置好conf下的三個檔案,這裡不做贅述,可以參考我另一篇部落格《Linux下svn伺服器端安裝及配置教程》

3、將版本庫下hook目錄下的post-commit.tmpl重新命名為post-commit,並給post-commit檔案可執行許可權

chmod a+x post-commit

post-commit檔案中寫入如下命令:

#!/bin/sh
export LANG=zh_CN.UTF-8
svn update /var/www/html/test

如果沒有儲存快取密碼,則update的時候需要指定svn使用者名稱及密碼,也可以強制不儲存密碼--no-auth-cache

4、啟動該版本庫

svnserve -d -r /usr/local/svn/testsvn

5、給web伺服器目的碼目錄checkout一份程式碼

svn checkout svn://127.0.0.1/ /var/www/html/test

6、搞定。這個時候客戶端svn提交程式碼的時候,就會自動update到程式碼目錄啦