手把手教SVN鉤子自動更新專案

安全劍客發表於2019-10-29
SVN鉤子,其實可以理解為觸發器,裡面是 shell程式碼,常用鉤子含義請移步:SVN鉤子簡介和常用鉤子說明。
使用post-commit更新

1.SVN 伺服器地址:192.168.31.33

2.web伺服器地址:192.168.31.34

3.SVN版本庫地址:/home/svn/qxy

4.web專案地址:/home/wwwroot/qxy

5.由於SVN和web並不在同一伺服器上,所以涉及到ssh登入,並且需要設定免金鑰登入

個人svn同步實現原理

1.開發人員本地電腦通過SVN Commit 版本到SVN伺服器上。

2.SVN伺服器post-commit 檢測到有版本變更,根據其中的定義設定通過ssh 方式登入到web伺服器執行svn update操作

3.我需要記錄一些資訊,所以採用了ssh 登入後執行特定 指令碼進行update操作

鉤子位置位於SVN伺服器/home/svn/qxy/hooks 目錄下,預設提供了常用鉤子:

[root@docker_server hooks]  ll
total 36
-rw-r--r-- 1 root root 1977 Sep  1 16:49 post-commit.tmpl
-rw-r--r-- 1 root root 1638 Sep  1 16:49 post-lock.tmpl
-rw-r--r-- 1 root root 2289 Sep  1 16:49 post-revprop-change.tmpl
-rw-r--r-- 1 root root 1567 Sep  1 16:49 post-unlock.tmpl
-rw-r--r-- 1 root root 3426 Sep  1 16:49 pre-commit.tmpl
-rw-r--r-- 1 root root 2434 Sep  1 16:49 pre-lock.tmpl
-rw-r--r-- 1 root root 2786 Sep  1 16:49 pre-revprop-change.tmpl
-rw-r--r-- 1 root root 2122 Sep  1 16:49 pre-unlock.tmpl
-rw-r--r-- 1 root root 2780 Sep  1 16:49 start-commit.tmpl
授權SVN伺服器面金鑰登入到web伺服器

1.在SVN伺服器上生成金鑰檔案:

ssh-keygen -t rsa

連續回車即可,生成的檔案位於/root/.ssh/ 下,檢視需要ls -a  命令

2.複製金鑰檔案到web伺服器上:

ssh-copy-id -i /root/.ssh/id_rsa.pub  root@192.168.31.34

該操作需要輸入web伺服器root密碼

3.複製完成後/root/.ssh 下會生成一個known_hosts 檔案,裡面記錄了授權資訊(加密的)

編輯post-commit 檔案
cp post-commit.tmpl post-commit
vim post-commit
#!/bin/bash
REPOS="$1"
REV="$2"
LOGFILE=/var/log/svn.log
exec 1>>"$LOGFILE"
exec 2>&1
export LC_CTYPE="en_US.UTF-8"
export LC_ALL=
SVNLOOK=/usr/bin/svnlook
TIME=$(date "+%Y-%m-%d %H:%M:%S")
AUTHOR=$($SVNLOOK author -r $REV "$REPOS")
CHANGEDDIRS=$($SVNLOOK dirs-changed $REPOS)
MESSAGE=$($SVNLOOK log -r $REV "$REPOS")
 
function myecho() {
    echo "$TIME" "$*"
}
myecho "**************************************************************"
myecho "提交版本:$REV 作者:$AUTHOR"
myecho "提交備註:$MESSAGE"
myecho "修改目錄:$(echo $CHANGEDDIRS | tr '\n' ' ')"
 
ssh root@192.168.31.34 "/home/svnup.sh">/dev/null
增加 指令碼執行許可權
chmod 744 post-commit
web伺服器上新建匹配指令碼
vim /home/svnup.sh
 
#!/bin/bash
logfile=/var/log/svnup.log
echo "-----------------------------------" >>$logfile
echo $(date +"%y-%m-%d %H:%M:%S") >>$logfile
svn update /home/wwwroot/qxy >>$logfile
echo "-----------------------------------" >>$logfile
指令碼測試

直接在SVN伺服器上執行鉤子 sh post-commit,如果一切正常,對應的兩個日誌檔案中都會生成日誌資訊,web伺服器上雖然沒有版本更新,但是也會產生更新的記錄

開發電腦推送版本到SVN伺服器測試,如果出現錯誤,會有post-commit 的相關提示,一般都是鉤子中 命令問題,詳細排錯即可。
手把手教SVN鉤子自動更新專案手把手教SVN鉤子自動更新專案

這個方案其實很累贅,並且需要web伺服器能夠root登入,另外如果是一個版本庫下有不同的專案,也無法進行判斷具體更新哪個專案,接下來將進一步完善。

原文地址: https://www.linuxprobe.com/svn-hook-project.html

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2661737/,如需轉載,請註明出處,否則將追究法律責任。

相關文章