当我们在进行版本库更新后却无法及时告知远程客户端自动更新版本,我们可以利用svn钩子实现,但前提是服务器端和客户端可以进行无密码传输,以便于我们利用svn钩子直接执行svn up。
下面我们看一个脚本:
#!/bin/sh
# 库的路径
REPOS="$1"
# 新提交的版本号
REV="$2"
#程序目录
svn_bin=/usr/bin
svn_data_path=/data/svn
APP=/data/app
test_ip=192.168.1.2
exec 1>>"$LOGFILE"
exec 2>&1
date=`date "+%Y-%m-%d %H:%M:%S"`
author=`svnlook author -r $REV "$REPOS"`
function myecho()
{
echo "$date" "$*"
}
myecho "提交版本号: $REV 作者: $author"
for changed_dir in `$svn_bin/svnlook dirs-changed $svn_data_path`
do
update_path=`echo $changed_dir | awk -F / '{print $1}'`
myecho "Update: $changed_dir"
if [ "$update_path" = "test ];then
/usr/bin/sshroot@$test_ip "export LANG=en_US.UTF-8 ; cd $APPS/$changed_dir ; svn up"
myecho "Svn up: $changed_dir totest_ip $test_ip"
else
myecho "Svn up: $changed_dir has not been uploaded."
fi
done