svn钩子文件部署

 : jank    :   : 2290    : 2017-01-09 18:45  linux

一、svn钩子文件说白了,就是本地对svn的操作同步到服务器端。同时在服务端进行操作日志记录。

二、在建好的svn仓库中有一个hooks目录,那么hooks中的文件对应的功能如下:

      start-commit 提交前触发事务
      pre-commit 提交完成前触发事务
      post-commit 提交完成时触发事务
      pre-revprop-change 版本属性修改前触发事务
      post-revprop-change 版本属性修改后触发事务

三、直奔主题,上代码,如下shell脚本

#!/bin/sh   
export.UTF-8                  # 设置字符集
dateTime=`date +%F`         # 设置时间格式 年_月_日
REPOS="$1"               # 仓库的路径   
REV="$2"                # 新提交的版本号   
LOGFILE=/home/svn/go/log/svnhooks_${dateTime}.log       # 钩子脚本的日志   
WEBROOT=/home/blog                      # WEB服务器的代码根目录  
SVN=/usr/bin/svn                       # svn命令路径
SVNLOOK=/usr/bin/svnlook                   # svnlook路径
# 脚本的标准输出和标准错误输出都打印到日志文件里   
exec 1>>"$LOGFILE"  #写入日志文件
exec 2>&1
TIME=$(date "+%H:%M:%S")
AUTHOR=$($SVNLOOK author -r $REV "$REPOS")   #提交作者   
CHANGEDDIRS=$($SVNLOOK dirs-changed  $REPOS) #修改的目录集合 不能加 $REV
CHANGEDFILES=$($SVNLOOK changed -r  $REV $REPOS) #修改的文件路径  ,必须加$REV
MESSAGE=$($SVNLOOK log -r $REV "$REPOS")    #提交时的备注信息,不建议用中文   
#**************************************************************   
function myecho() { #日志输入函数
    echo "$TIME" "$*" 
}
#判断根目录是否存在.svn文件
if [ ! -d $WEBROOT/.svn ]; then
        myecho " no .svn file "
else
        #更新
        $SVN update $WEBROOT  #服务端的同步就这行代码有作用,其他的都是为了日志记录
        if [ $? == 0 ]; then
                myecho  "  sucess "
        else
                myecho  "   fail   "
        fi
fi

myecho "**************************************************************"
myecho "提交版本:$REV 作者:$AUTHOR"
myecho "提交备注:$MESSAGE"
myecho "修改目录:$(echo $CHANGEDDIRS | tr '
' ' ')"
myecho "修改路径:$(echo $CHANGEDFILES | tr '
' ' ')"

编辑完后,必须对其赋予执行权限。整个部署就算结束了

   

备案编号:赣ICP备15011386号

联系方式:qq:1150662577    邮箱:1150662577@qq.com