2
回答
SVN的POST-COMMIT钩子怎么用
SVN的POST-COMMIT钩子怎么用,自动部署代码
SVN
举报
vincent_x
发帖于4年前 2回/2K+阅
共有2个答案 最后回答: 4年前
利用SVN的POST-COMMIT钩子自动部署代码
 
我们在开发的过程将代码提交到SVN后使用SVN的hook,通过post-commit脚本,在目
标文件夹根下执行svn update操作,将更新内容同步到测试环境,这样开发调试非常方便。
 
post-commit内容:
--------------------------------------------
#!/bin/sh
#修改为服务编码
export LANG=zh_CN.gb2312
 
#Set variable
REPOS="$1"
REV="$2"
 
 
SVN=/usr/bin/svn
WEB=/data/home/htdocs
LOG=/data/home/auto_svn.log
 
#update the code from the SVN
$SVN update $WEB --username username --password password --non-interactive
 
#......................
if [ $? == 0 ]
then
 
    echo  "$REPOS" "$REV" >> $LOG
    echo `date` >> $LOG
    echo "##############################" >> $LOG
fi
-----------------------------------------------
 需要注意:
1、需要用export指定编码。
2、需要指定svn全路径。
3、代码CO出来之后,可以进行post-commit脚本的测试了。因为svn的hooks执行的时候不带有任何的环境变量,所以我们不能通过简单的 ./post-commit 进行代码的测试。必须要使用sudo su 等命令切换到svn或者apache服务器运行用户下,用下面的方法进行测试
Python代码  
env – ./post-commit  
==================================================================================
#!/bin/bash
export LANG=en_US.UTF-8
src=/data/webroot/ask.j1.com ##local checkout directory###
deswebroot=/data/wwwroot/ask
remoteip=210.14.70.4
/usr/local/svn/bin/svn update $src --username webapp --password 969470900eb90baef8b62483a2111a9b | grep -v -i update|awk '{print $2}'| while read chfile
do
     if [ -e $chfile ];then
        if [ -f $chfile ];then
   #chown ftp.ftp $chfile
   dfile=$(echo $chfile |sed "s:$src\/::") ###only file name###
   rsync -avz -e ssh --exclude-from=/data/svndata/ask.j1.com/exclude-file $src/$dfile root@$remoteip:$deswebroot/$dfile
        else
   #chown ftp.ftp $chfile
   dfile=$(echo $chfile |sed "s:$src\/::")
   rsync -auvz -e ssh --exclude-from=/data/svndata/ask.j1.com/exclude-file $src/$dfile/ root@$remoteip:$deswebroot/$dfile/
        fi
     fi
done

顶部