svn+post-commit實現自動部署
阿新 • • 發佈:2019-02-16
一、安裝
#yum install subversion
檢查是否安裝了svn
#subversion –v
建立svn庫和對應的目錄
#mkdir /svn/www.test.com
#svnadmin create /svn/www.test.com
二、配置
建立登入svn的使用者和密碼
#vim /svn/www.test.com/conf/passwd
[users]
使用者名稱=密碼
設定svn使用者許可權
#vim /svn/www.test.com/conf/authz
[/]
使用者名稱=rw
設定svn主配置檔案
#vim /svn/www.test.com/conf/
anon-access=none #使非授權使用者無法訪問
auth-access=write #使授權使用者有寫許可權
password-db=password
authz-db=authz #啟用訪問控制檔案
realm=/svn/www.test.com #認證名稱空間,subversion會在認證提示裡顯示,並且作為憑證快取的關鍵字。
啟用svn:#svnserve –d –r /svn/www.test.com
注可以用—listen-port 引數修改svn的埠
三、連線svn
1、linux主機連線svn
#svn co svn://192.168.1.180
輸入使用者名稱和密碼後就可以將svn上的資料下載到本地。
2、windows主機連線svn
利用TortoiseSVN工具進行連線。
四、利用svn的post-commit將svn伺服器的檔案同步更新到固定的目錄
#cd /svn/www.test.com/hooks
#cp post-commit.tmpl post-commit
#chmod a+x post-commit
編輯post-commit鉤子指令碼
#vim post-commit
export LANG=zh_CN.UTF-8 #設定環境變數,如果沒有設定可能會出現update報錯
SVN=/usr/bin/svn
WEB=/usr/local/apache/htdocs/192.168.1.180
${SVN} update ${WEB} --username rsync --password rsync
注:WEB中指定的目錄不能為空目錄,需要先checkout
報錯註解,及解決辦法:
1、
svn: Error converting entry in directory '/usr/local/apache/htdocs/192.168.1.180' to UTF-8
svn: Can't convert string from native encoding to 'UTF-8':
svn: ?\229?\164?\141?\228?\187?\182 ?\229?\164?\141?\228?\187?\182 ?\229?\164?\141?\228?\187?\182 ?\229?\164?\141?\228?\187?\182 rsync-3.0.9.tar.gz
原因:svn伺服器上的檔案存在編碼為UTF-8的檔案,如果伺服器不支援UTF-8編碼就會報這個錯誤。
解決辦法:在post-commit鉤子指令碼中,新增export LANG=zh_CN.UTF-8欄位,更改環境變數中的編碼。
2、
Skipped '/usr/local/apache/htdocs/192.168.1.180'
這個時候使用命令svn update命令會提示
Skipped ‘.’
原因:192.168.1.180是一個空目錄或這個目錄不存在
解決辦法:先進行手工的checkout,之後再post-commit中將目錄指定到checkout的目錄,就解決了。