SVN跨服務器配置post-commit提交後自動更新(SVN與WEB服務器不在同一臺機器)

背景狀況:SVN與WEB不在同一臺服務器上,須要SVN提交後WEB站點自動進行SVN UPDATE更新,查閱網上的教程,發現部分的細節和權限部分沒有提到致使跨服務器ssh執行更新腳本失敗,手動執行post-commit能夠經過html


需求:開發想要在項目修改並提交到svn服務器上後,web服務器可以自動進行svn update更新站點,並當即看到修改後的web頁面效果nginx


思路:項目提交時觸發post-commit裏面的腳本並寫入到/var/log/svn.log中,腳本經過SSH免密登錄到WEB上而後再進行svn up.sh的腳本觸發web站點更新
web


配置:SVN服務器一臺(172.17.8.8) WEB測試服務器一臺(172.17.8.9) 兩臺服務器均爲CentOS7.4(1708)shell

            

          SVN項目版本環境在/svn/project(目錄中含有db hook等文件)    WEB的網站路徑爲/var/www/html/project下
apache



須要安裝的軟件:兩臺服務器均須要安裝Apache軟件(web服務器nginx也能夠)和SVN軟件,個人web測試環境爲lampvim


兩臺服務器均安裝apache(httpd)、SVN(subversion),SVN服務器須要安裝svn和apache的集成模塊(mod_dav_svn),安裝方式爲yum install httpd subversion mod_dav_svn
bash


在此不詳細敘述SVN帳號和密碼以及權限的調試,只說post-commit、腳本、權限、以及log的寫法和設置
服務器




1.兩臺服務器各創建系統帳戶爲svn的用戶名(useradd svn),並給svn用戶設置密碼(passwd svn) 注意:此步驟兩臺服務器都要作相同的操做
ssh


2.登錄SVN服務器作ssh免密碼登錄web服務器的操做:ide


(1)在SVN服務器下,使用su - svn(要帶-,說明環境變量也切換到svn下面) ,切換到svn用戶上,執行ssh-keygen -t rsa,一路回車執行,成功的話會生成SHA256的密鑰文件

(2)將svn用戶下的密鑰文件拷貝至web服務器下的svn用戶ssh目錄:ssh-copy-id -i /home/svn/.ssh/id_rsa.pub svn@172.17.8.9,輸入密碼後提示覆製成功

(3)使用ssh登錄到web服務器:ssh svn@172.17.8.9,輸入一次密碼後,嘗試再次執行該命令,確認可以免密登錄後便可。


3.將apache的啓動進程用戶修改爲svn

vim /etc/httpd/conf/httpd.conf

找到User和Group(大約66 67行左右)將apache改成svn,:wq保存退出


將全部的svn目錄下的權限修改爲svn用戶,使用-R遞歸方式

chown -R svn:svn /svn


4.進入項目目錄,編寫post-commit腳本並賦予其執行權限

vim /svn/project/hooks/post-commit

腳本以下:


#!/bin/sh
REPOS="$1"
REV="$2"
LOGFILE=/var/log/svn.log ##這裏是爲了保存日誌並查看是否有報錯,有報錯說明執行了未成功,沒報錯說明未執行成功,檢查權限,執行成功會有svn update信息
exec 1>>"$LOGFILE"
exec 2>&1
export.UTF-8
/usr/bin/ssh -l svn 172.17.8.9 "/bin/bash /shell/svnup.sh"
exit 0

保存退出


賦予post-commit可執行權限

chmod 777 /svn/project/hooks/post-commit


5.建立腳本日誌並賦予svn權限

touch /var/log/svn.log

chmod 777 /var/log/svn.log

chown svn:svn /var/log/svn.log


6.修改完畢後重啓Apache服務器使其生效

systemctl restart httpd.service


至此SVN服務器配置完畢


################################


WEB服務器配置:


1.做者自己建立了一個管理腳本的文件夾

mkdir /shell/

編寫腳本

vim /shell/svnup.sh


腳本內容

#!/bin/bash
/usr/bin/svn update /var/www/html/project/


:wq保存退出


2.賦予可執行及最大權限

chmod 777 /shell/svnup.sh


3.將站點的屬主屬組改成svn用戶,並將站點設置爲777權限

chown -R svn:svn /var/www/html/project

chmod -R 777 /var/www/html/project


4.切換至svn用戶並從svn服務器上拉取網站文件(很是關鍵的一步,必須使用svn帳戶來操做,使用root用戶操做會失敗)

切換至svn用戶    su - svn

檢出網站文件至網站目錄   svn checkout http://172.17.8.8/svn/project /var/www/html/project --username taoye

輸入用戶的密碼

至此,全部網站都以svn用戶身份拉取到網站目錄下


#############################################


操做完成後,嘗試svn提交文件看是否在提交時可以觸發post-commit文件,若是觸發時有錯誤提示,有多是權限和屬主屬組不對,要麼就是post-commit中的腳本開頭不是以#!/bin.sh開頭的


若是在提交的時候沒有出現問題,那麼能夠查看一下SVN服務器上的/var/log/svn.log文件中查看是哪裏出現問題

  1. 若是提示/usr/share/httpd等提示,說明你的apache不是以svn用戶啓動的,或者你的svn項目權限和屬主屬組沒有變成svn用戶

  2. 若是提示ssh認證錯誤等信息,說明web服務器在svn checkout的時候不是以svn用戶進行的,或者是在兩臺機器作免密登錄的時候用戶使用不正確,切換到svn用戶進行操做


切記,WEB服務器在svn checkout的時候,用戶必須以svn用戶來進行!!!

相關文章
相關標籤/搜索