: jank : : 5734 : 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 ' ' ' ')"
编辑完后,必须对其赋予执行权限。整个部署就算结束了