SVN鉤子hooks
簡述
由於安全原因,Subversion版本庫在一個空環境中執行鉤子腳本-->就是沒有任何環境變量,甚至沒有$PATH或%PATH%。註意必須在你的鉤子中設置好環境變量或為你的程序指定好絕對路徑。
默認情況下,SVN版本庫鉤子的目錄中包含各種版本庫鉤子模板
[root@localhost hooks]# ll /svn/HLink/hooks/ 總用量 36 -rw-r--r-- 1 root root 1977 12月 19 2016 post-commit.tmpl -rw-r--r-- 1 root root 1638 12月 19 2016 post-lock.tmpl -rw-r--r-- 1root root 2289 12月 19 2016 post-revprop-change.tmpl -rw-r--r-- 1 root root 1567 12月 19 2016 post-unlock.tmpl -rw-r--r-- 1 root root 3426 12月 19 2016 pre-commit.tmpl -rw-r--r-- 1 root root 2410 12月 19 2016 pre-lock.tmpl -rw-r--r-- 1 root root 2786 12月 19 2016 pre-revprop-change.tmpl -rw-r--r-- 1 root root 210012月 19 2016 pre-unlock.tmpl -rw-r--r-- 1 root root 2780 12月 19 2016 start-commit.tmpl
start-commit 事務創建之前。
傳給 hook 的 參數:
- 參 數 1 , 代碼庫路徑。
- 參 數 2 , 試圖提交的用戶名。
hook 的返回值:非 0 則 終止。
一 般用途:判斷用戶是否有權限進行提交 操作。
pre-commit 事務完成,但未提交。
- 參 數 1 , 代碼庫路徑。
- 參 數 2 , 事務名。
hook 的返回值:非 0 則 終止提交,操作回滾。
一 般用途:對提交內容進行檢查。如要求 提交必須填寫提交信息。
post-commit 事務提交完畢,新的修訂版被 創建。
傳給 hook 的 參數:
- 參 數 1 , 代碼庫路徑。
- 參 數 2 , 剛創建的修訂版號。
hook 的返回值被忽 略。
一 般用途:發送郵件通知,或備份代碼 庫。
pre-revprop-change 修改修訂版屬性(如提交時提 供的信息 message )之前。
由於修訂版屬性一旦修改就會 永久的丟失,除非安裝這個事件的 hook ,subversion 的 客戶端不允許遠程修改修訂版屬性。
傳給 hook 的 參數:
- 參 數 1 , 代碼庫路徑。
- 參 數 2 , 要修改的修訂版號。
- 參 數 3 , 操作用戶名。
- 要 修改的屬性。
hook 的返回值:非 0 則 終止。
一 般用途:保存修訂版屬性的改變記錄。
post-revprop-change 修訂版屬性值被修改之後。
如果沒有安裝 pre-revprop-change 的 hook , 這個事件的 hook 不會被執行。
傳給 hook 的 參數:
- 參 數 1 , 代碼庫路徑。
- 參 數 2 , 要修改的修訂版號。
- 參 數 3 , 操作用戶名。
- 要 修改的屬性。
hook 的返回值被忽 略。
一 般用途:發送郵件
實踐
因svn倉庫在服務器2上, 服務器3是測試服務器, 鉤子要遠程執行更新腳本.所以先做ssh免密認證
服務器2上 生成秘鑰對 ssh-keygen , ssh-copy-id 把公鑰發給服務器3
編輯鉤子腳本
[root@localhost hooks]# vim post-commit
#!/bin/bash export LANG=en_US.UTF-8 REPOS="$1" TXN="$2" datelog=`date +%Y%m%d` datetime=`date +%Y-%m-%d-%T-%A` # Make sure that the log message contains some text. /bin/echo $REPOS $TXN $datetime >>/tmp/svn-hcloud-$datelog.log || exit 1 ssh 192.168.0.3 "sh /srv/uphcloud.sh" # Check that the author of this commit has the rights to perform # the commit on the files and directories being modified. # commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1 # All checks passed, so allow the commit. exit 0
[root@local ~]# cat /srv/uphcloud.sh #!/bin/bash type svn if [ $? != 0 ];then echo "need install subversion first" exit fi cd /srv [ ! -e /srv/hcloud ]&& mkdir -p /srv/hcloud;cd /srv/hcloud echo `pwd` >>/srv/herror.log echo `date` >>/srv/herror.log # BScloud echo "hcloud" >>/srv/herror.log #if [ ! -e /srv/hcloud ]; then if [ ! -e /srv/hcloud/web ]; then /usr/bin/svn co --no-auth-cache svn://192.168.0.2/hcloud/web --username svn賬號 --password 密碼 2>&1 >>/srv/herror.log else #cd /srv/hcloud/ cd /srv/hcloud/web /usr/bin/svn update --no-auth-cache --username svn賬號 --password 密碼 2>&1 >>/srv/herror.log cd /srv fi cp -uraf /srv/hcloud/web/* /data/web/hcloud/web/ cd /data/web/ chown -R nginx:nginx hcloud/ chmod -R 777 /data/web/hcloud/web/web_code/smarty/templates_c
SVN鉤子hooks