SVN使用钩子函数(post-commit)自动推送到业务服务器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SVN使用钩子函数(post-commit)自动推送到业务服务器相关的知识,希望对你有一定的参考价值。

方法对比:update和export对比
update会产生隐藏文件,存在安全隐患,update是增量的,在代码比较大的时候适用
export直接导出干净的代码,不会存在隐藏文件,不适合较大的库

方法一:update

钩子模版: 仓库中hooks目录下post-commint模版可以触发
shell>cp post-commit.tmpl post-commit
shell>chmod +x post-commit
shell>vim post-commit
REPOS="$1" //仓库名
REV="$2" //版本
LOGPATH="/app/log" //存放日志
export LANG=zh_CN.UTF-8
[ ! -d ${LOGPATH} ] && mkdir ${LOGPATH} -p
SVN=/usr/bin/svn
echo "code Deployed by at $REPOS,$REV" >> /app/log/log.log
cd /backup
/usr/bin/svn update --username admin --password 123com /backup //将代码先更新到/backup目录,之前需要通过svn co 导出一份到/backup目录,才能update
if [ $? -eq 0 ]
then
rsync -avz /backup/ [email protected]::backup/ --password-file=/etc/rsync.password
fi

经测试:

如果不
cd /backup 目录下进行update会报错
[[email protected] test]# svn update svn://x.x.x.x:20000/test /backup/
Skipped ‘svn://x.x.x.x:20000/test‘
Skipped ‘/backup‘

方法二:export

shell>vim post-commit
REPOS="$1" //仓库名
REV="$2" //版本
LOGPATH="/app/log" //存放日志
export LANG=zh_CN.UTF-8
[ ! -d ${LOGPATH} ] && mkdir ${LOGPATH} -p
SVN=/usr/bin/svn
echo "code Deployed by at $REPOS,$REV" >> /app/log/log.log
cd /backup
/usr/bin/svn export svn://x.x.x.x:20000/test /backup --force --username abc --password 12345 --no-auth-cache //直接将文件导入/backup,再用sync同步到生成服务器
if [ $? -eq 0 ]
then
rsync -avz /backup/ [email protected]::backup/ --password-file=/etc/rsync.password
fi

注:
--force 是说强制覆盖/backup这个文件夹,避免这个文件夹不为空时报错
--no-auth-cache 是说不缓存用户名和密码,这是出于安全考虑

以上是关于SVN使用钩子函数(post-commit)自动推送到业务服务器的主要内容,如果未能解决你的问题,请参考以下文章

关于svn钩子

svn上传文件钩子

SVN设置更新钩子

svn采用hooks钩子自动同步代码

svn学习笔记5(高级应用)

svn服务器端的客户端自动更新