我们通过之前文章《SVN钩子简介和常用钩子说明》已经知道 ,SVN钩子实际就是一些shell脚本。今天我们就通过post-commit钩子来实现下svn数据更新,借助rsync实现自动同步数据。
以我们之前创建的版本库/home/svndata/21yunweinew为例说明。
我们创建一个网站源码目录放置我们的程序,实际生产环境中可以是已经存在的web源码目录,比如/home/webdata/21yunweinew。
之前我们同步数据会是通过下载或更新命令来实现:
svn co svn://59.46.80.248/21yunweinew /home/webdata/21yunweinew --user=xxxxxx --password=xxxxxx
如今,我们直接操作svn版本库上的钩子,写脚本来直接实现数据同步操作。首先,我们进入21yunweinew的钩子hooks目录编辑脚本post-commit如下:
#!/bin/bash
REPOS="$1"
REV="$2"
export LC_CTYPE="en_US.UTF-8"
export LC_ALL=
LOGPATH="/home/svn/log"
[ ! -d ${LOGPATH} ] && mkdir -p $LOGPATH
SVN=/usr/bin/svn
$SVN up /home/webdata/21yunweinew --username 21yunwei --password xxxx 2>&1 >>$LOGPATH
if [ $? -eq 0 ]
then
/usr/bin/rsync -az --delete /home/webdata/21yunweinew /tmp/
fi
为了测试,我们将新增的数据放到了/tmp目录中。通过数据更新查看tmp目录内容:
[root@servermanager hooks]# ls /tmp/21yunweinew/ -l
total 160
drwxr-xr-x 4 root root 4096 Aug 30 16:48 branch
-rw-r--r-- 1 root root 33792 Aug 30 16:48 DHCP服务器的配置1.doc
-rw-r--r-- 1 root root 24576 Aug 30 16:48 DHCP服务器的配置.doc
-rw-r--r-- 1 root root 34304 Aug 30 16:48 DHCP服务器的配置二.doc
-rw-r--r-- 1 root root 46592 Aug 30 16:48 DNS服务器的配置.doc
-rw-r--r-- 1 root root 830 Aug 30 16:48 rsync.sh
drwxr-xr-x 3 root root 4096 Aug 30 16:32 tag
drwxr-xr-x 3 root root 4096 Aug 30 16:48 trunk
注意事项:1,钩子要给shell脚本执行权限。2,脚本中命令调用最好使用绝对路径。