程序思路:用户向SVN提交程序,SVN启动hooks,由不同的hooks处理。 这里使用post-commit,利用post-commit在SVN服务器的本地硬盘目录中检测代码,并通过rsync与远程WEB服务器同步。
hooks文件详细信息
#在开始提交之前启动事务
#在预提交完成之前启动事务
#后提交完成后触发事务
# pre-revprop-change版本属性更改之前启动事务
# post-revprop-change版本属性更改后触发事务
用这些名字编写的脚本可以实现各种功能,非常强大。
2、同步命令rsync的具体参数使用
3、具有基本语言编程能力的bash python perl均可实现
后期提交具体实现详细信息
后期提交脚本
#! 美丽的橘子/sh
---------------------请参阅
# filename :后提交
# description : webserverwithsynchronizationcodebysvn
---------------------请参阅
#版本1.0
#用户提交代码后,将代码中的最新更改同步到WEB服务,同时注意不包括删除操作。
#设置可变
SVN=/usr/美丽的橘子/svn
WEB=/home/test_nokia/
RSYNC=/usr/美丽的橘子/rsync
LOG=/tmp/rsync_test_nokia.log
WEBIP='192.168.0.23 '
导出lang=en _ us.utf-8
#更新the code from the SVN
$ SVN更新$ we B----username user----密码密码
#如果上一个代码成功完成,将继续执行下一个代码
if [ $?==0 ]
陈真
echo '' $LOG
echo `date` $LOG
echo ' # # # # # # # # # # # # # # # # # # # # # # # # $ log
chown-r nobody : nobody/home/test _ Nokia /
SVN服务器到WEB服务器notes:by the key的同步代码
$ rsync-vaz TPH-- time out=90-- exclude-from=/home/SVN/exclude.list $ web $ log
fi
以上是具体的post-commit程序
注意事项:
1、必须定义变量。 主要是已使用的命令的路径。 由于SVN的安全问题,没有调用系统变量。 手动运行没有问题,但如果SVN自动运行,则无法运行。
2、SVN更新前请务必手动发出一份检查输出。 另外,请务必在此添加用户和密码。 如果只是手动的话会更新,但是不能自动更新相同的东西。
3、除了上一个命令的判断外,如果更新时出现问题,如果程序没有结束,则继续与WEB服务器同步代码。 代码有问题
4、请记住设置所属用户。 rsync可以同步文件的属性。 另外,我们的WEB服务器一般不是根用户,所以如果用户不正确,WEB程序就不能正常工作。
5、我建议你记录日志。 犯错误的时候可以马上排出错误
6、最后最关键的数据同步,rsync的相关参数必须清晰,这一点不言而喻。 请注意几个场景:
这里的环境打开了SVN服务器和WEB服务器
将SVN服务器定义为源服务器将WEB服务器定义为目标服务器
场景1、如果目标WEB服务器是统一混合的,并且只有一个WEB静态资源,则如果用户发送的、自动生成的都在WEB上的一个目录中,建议不要使用参数delete
这样,该程序实现了从源服务器到目标服务器的更新和添加,没有删除操作,WEB服务器的内容多于源SVN的服务器内容
方案二,实现镜像,即实现目标WEB服务器和源SVN服务器那样的数据、SVN上的任何变化WEB上的变化,都需要-delete参数
场景3,有些子目录不需要同步。 某些目录可能是缓存的临时垃圾目录,也可能是专用图像目录,而不是样式或合成。 使用名为exclude的参数
注意:使用此参数时,绝对不需要写路径。 只要有目录名称,aa就表示文件aa/或目录。 缺点是,如果多个子目录具有相同的名称,则这些名称不会同步
建议您以- exclude-from=/home/SVN/exclude.list文件的形式轻松添加和删除
exclude.list
. svn/
. DS_Store
images/
使用SVN挂接,可以查看是否有写日志、选项卡、是否有文件要替换为空间、是否有文件不允许上载、是否有文件超过限制大小等