您的位置:首页 > 其它

关于SVN+sersync实时同步到远程服务器的思路

2015-01-31 18:00 281 查看
关于SVN实时同步到远程服务器的方案
需求及流程简介

由于程序员协同开发,彼此之间开发习惯各有不同,经常会出现大家误删改他人代码的情况,对线上生产环境的稳定造成了极大的影响。因此特请出SVN来负责代码版本控制,以解决上述问题。

但是简单的代码控制要增加很多不必要的人工成本,如:手动提交、检出、发布、测试等,所以作为运维人员,就自然而然想到有什么办法可以让其将以上操作都自动执行完成。固有了如下需求。

1、代码commit至A服务器后,自动update到代码的working copy

2、update后需直接远程同步至B服务器进行测试

3、定期备份svn服务器代码库文件至备份服务器(此处与B公用一台)

4、待测试完毕后,通过程序控制将working copy文件,自动发布到生产环境(待开发)

以上前3步均是由系统级操作完成,第4步需要程序写出一个交互系统,来完成测试完毕发布的过程。

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

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

环境:SVN服务器:192.168.2.199

Web测试服务器:192.168.2.117

首先在199上面安装svn,安装过程不再描述,在/var/svn/test建立一个test库,用import把文件上传到库里面,新建一个目录/data用checkout把该库迁出到/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程序的路径

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

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

这个时候当svn提交的时候,会通过该脚本同步到本地服务器的/data目录,然后sersync服务会把/data目录同步到远程测试服务器的/www/test目录下面。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: