关于SVN实时同步到远程服务器的方案 点击:1594 | 回复:0



cqu_rockwell

    
  • 精华:16帖
  • 求助:0帖
  • 帖子:678帖 | 8694回
  • 年度积分:0
  • 历史总积分:57901
  • 注册:2010年6月30日
发表于:2011-11-17 16:17:30
楼主

公司里有2台测试服务器,一 台里面是开发的库文件,另一台是用来测试的。现在开发的提交了文件之后,每次需要手动的更新到另一台服务器上,很麻烦,所以有了这个方案,不过还没测试过 大量文件的时候会不会有什么问题。估计svn大量文件的时候会卡死,本文只是做一个测试,讲的是一个思路,哪位童鞋有更好的思路联系我哦。

思路:首先在SVN库服务器上建立一个目录,利用svn自带的post-commit来把提交的文件同步到该目录,然后利用sersrnc实时同步到远程的服务器。

环境:SVN服务器:192.168.2.199

           Web测试服务器:192.168.2.117

首先在199上面安装svn,安装过程不再描述,在/var/svn/test建立一个test库,用import把文件上传到库里面,新建一个目录/datacheckout把该库迁出到/data目录

199上面安装sersync

解压sersync2.4_32bit_binary.tar.gz

进入到GNU-Linux-x86目录

修改confxml.xml

修改这3行文件,

<host hostip="localhost" port="8008">表示本机IP和端口

<localpath watch="/data">           要监控本机的目录,

 <remote ip="192.168.2.117" name="web"/> 要推送的远程服务器的IP和模块的名称

<auth start="true" users="test" passwordfile="/etc/rsync.pas"/>

启用密码验证,指定验证用户名和密码文件的位置

然后创建/etc/rsync.pas配置文件,里面写入test用户的密码,然后更改该文件的权限为600

Chmod 600 /etc/rsync.pas

然后在192.168.2.117里面安装rsync

rsync-3.0.9.tar.gz

./configure  --prefix=/usr/local/rsync && make && make install

编辑rsync的配置文件,默认位置问/etc/rsyncd.conf

uid=root                   //rsync运行的用户

gid=root                    //rsync运行的组

max connections=36000        //最大连接数

use chroot=no                 //不启用chroot

port=873                      //端口

log file=/var/log/rsyncd.log        //日志文件

pid file=/var/run/rsyncd.pid        //pid文件

lock file=/var/run/rsyncd.lock       //锁文件

【web】            //模块的名称

path = /www/test      //测试服务器网站的路径

ignore errors = yes     //忽略错误

read only = no        //该目录可读可写

auth users = test       //需要的用户名

secrets file = /etc/rsyncd.secrets   //密码文件存放的位置

然后创建/etc/rsyncd.secrets密码文件,里面写入用户名和密码可以写入多个用户

Test:test

更改该文件的权限为600 chmod 600 /etc/rsyncd.secrets

然后启动守护进程/usr/local/rsync/bin/rsync –daemon

再在192.168.2.199上面启动sersync

这个时候199上面的/data目录和117上面的/www/test目录已经同步了,在199上面更改/data目录下面的文件就会同步更新到117上面的/www/test目录里面了

现在需要做的就是如何让开发人员在提交的时候更新到测试服务器

首先在199上面把库文件迁出到/data目录下

Svn checkout svn://192.168.2.199/test /data

迁出之后,/data目录已经有文件了,这个时候去查看117上面的/www/test目录里面也是有文件的。

test库下面有一个hooks文件夹,里面有svn的钩子

我们可以借助这个钩子来触发当提交的时候,把文件同步更新到/data目录下面,然后sersync把该文件同步到远程服务器上

hooks目录下面

Cp pre-commit.tmpl post-commit

post-commit这个文件就是当提交之后会执行的动作,编辑该文件

vim post-commit

export LANG=zh_CN.UTF-8         //指定编码

WEB=/data/                   //定义一个被更新的目录

SVN=/usr/local/subversion/bin/svn    //定义SVN程序的路径

$SVNupdate$WEB --username wugang --password 2011110 //执行svn update命令,后面是指定用户和密码

然后给post-commit可执行权限,然后重启svn

这个时候当svn提交的时候,会通过该脚本同步到本地服务器的/data目录,然后sersync服务会把/data目录同步到远程测试服务器的/www/test目录下面。



热门招聘
相关主题

官方公众号

智造工程师