首页 > 代码库 > svn+钩子程序+rsync 自动化同步代码

svn+钩子程序+rsync 自动化同步代码

svn+钩子程序+rsync 自动化同步代码
实验环境如下:
     IP地址            服务器功能             路径                           同步机制
192.168.3.206          svn               svn路径:/data/svn                 rsync客户端
192.168.3.210          代码服务器        代码目录:/data/html               rsync服务端
注:用户提交svn代码后,svn会自动把数据放在/data/rsync目录,然后把/data/rsync数据自动更新到代码服务器/data/html目录
一、svn安装配置
svn服务器操作如下:
1、安装     
yum install -y subversion
svnversion --version #判断是否安装成功
#创建用户以及组
groupadd svn
useradd svn -g svn   -s /sbin/nologin
#有了SVN软件后还需要建立SVN库。
mkdir -p /data/svn
cd  /data/svn
svnadmin create coding
chown -R svn.svn coding
2、配置
#账号密码、分组、控制
2.1先设置authz
vim /data/svn/coding/conf/authz
[groups]
manage = system_svn,liuzhuang
coding = system_svn,test01
[/]
@manage = rw
[coding:/]
@coding = rw
[coding:/test]
@coding = rw

注:这里分成两个组,分别是manage,coding,都有读写权限.
2.2再设置passwd
vim /data/svn/coding/conf/passwd
#添加下面内容
system_svn = PASS             #此用户是svn连接用户
liuzhuang = pass123
test01 = pass123

#格式为:用户名=密码

2.3最后设定svnserve.conf
vim /data/svn/coding/conf/svnserve.conf
#找到下面内容需修改成下面一样就OK.
anon-access = none # 使非授权用户无法访问
auth-access = write # 使授权用户有写权限
password-db = password #密码文件路径
authz-db = authz   # 访问控制文件
realm = coding # 认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字。
采用默认配置. 以上语句都必须顶格写, 左侧不能留空格, 否则会出错.

注:以上配置文件需要放在文本最顶端,前面不能有空格,不然会报错。
3、连接
svnserve -d -r /data/svn
echo " svnserve -d -r /data/svn" >>/etc/rc.local  #开机自动启动svn服务
#修改监听端口如下
svnserve -d -r /data/svn --listen-port 3391
这样同一台服务器可以运行多个svnserver
svn://192.168.3.206:3690/coding  #输入用户和密码就可以成功提交svn代码了.
如果能够正常使用,到这里说明svn服务搭建ok.

二、rsync安装配置
代码服务器操作如下:
mkdir -p /data/html    #建立代码目录
1、下载rsync版本
cd  /root/soft
wget  http://rsync.samba.org/ftp/rsync/src/rsync-3.0.7.tar.gz
2、解压rsync
tar  zxvf  rsync-3.0.7.tar.gz  
cd rsync-3.0.7
./configure --prefix=/usr/local/rsync
make &&make install  
useradd coding   -s /sbin/nologin  #建立rsync用户coding
3、安装配置rsync
默认安装完,/etc下没有rsyncd.conf这个文件,不过我们可以新建:
vim /etc/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections = 30
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
transfer logging = yes
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
[svn_coding]                 #同步的模块名字
read only =  false       #false表示可以修改这个模块的内容,yes表示不能修改这个模块的内容
path = /data/html  #同步的模块目录
comment = svn_coding
auth users = coding           #同步的用户
secrets file = /etc/rsync_svn.pas    #同步密码文件
hosts allow = 192.168.3.0/24  #允许访问的rsync ip段
4、设置rsync服务器端同步密钥
vim   /etc/rsync_svn.pas
coding:coding_123   
#(表示用户名:密码)
chmod 600   /etc/rsync_svn.pas   #更改权限。
5、rsync启动守护进程
/usr/local/rsync/bin/rsync --daemon
echo "/usr/local/rsync/bin/rsync --daemon" >>/etc/rc.local   #开机自动启动rsync服务
svn服务器操作如下:
mkdir -p /data/rsync  #建议同步代码目录
mkdir -p /data/rsync_log #建议同步代码log目录
chmod 777 /data/rsync_log
1、密码设置
echo ‘coding_123‘ >/etc/rsync_svn.pas
chmod 600  /etc/rsync_svn.pas
2、从客户端更新文件到服务端
echo ‘hello‘ >/data/rsync/hello.txt    #建立测试文件
yum install -y rsync #安装rsync命令
rsync -avz --progress /data/rsync/  coding@192.168.3.210::svn_coding --password-file=/etc/rsync_svn.pas 

wKioL1PYsMPC-RaVAAENOnefLaU784.jpg

#/data/rsync/表示客户端推送文件的目录,coding表示用户名,192.168.3.210表示服务端ip,svn_coding表示服务端的模块名字
3、进入代码服务器/data/html目录,查看是否有hello.txt文件,有表示rsync安装ok.

三、svn钩子程序配置

svn服务器操作如下:
1、目录建立及准备
cd /data/rsync
svn co svn://192.168.3.206:3690/coding    #第一次需要拉文件到/data/rsync目录,第一个root是系统密码,后面才是连接svn的用户和密码
2、钩子程序编写
vim /data/svn/coding/hooks/post-commit

#!/bin/bash
export LANG=zh_CN.UTF-8
svn=/usr/bin/svn
svn_rsync=/data/rsync/coding/      #同步钩子程序的目录
rsync=/usr/bin/rsync
password_file=/etc/rsync_svn.pas   #密码文件
coding_server1=192.168.3.210::svn_coding   #rsync相关模块参数
log=/data/rsync_log/rsync.log
exclude=/data/rsync_log/exclude.list
date_start=$(date +%s)
for svn_dir in `svnlook dirs-changed /data/svn/coding/`
do
    $svn update --username=system_svn --password=‘PASS‘ $svn_rsync/$svn_dir
done
if [ $? == 0 ]
then
   
 $rsync -vaztpH  --timeout=90 $svn_rsync coding@$coding_server1 
--password-file=$password_file --exclude-from=$exclude >> $log
fi
date_end=$(date +%s)
echo $((date_end-date_start)) >>/data/rsync_log/time.log

chmod 777  /data/svn/coding/hooks/post-commit
3、测试
 用户在svn任意提交代码,看能否自动更新到代码服务器。如果看到代码数据已更新表示ok.

总结:这套svn自动更新成功,是参考彪哥写的钩子程序。彪哥是大神哇。我们只能膜拜了。

本文出自 “成都@阿状” 博客,请务必保留此出处http://azhuang.blog.51cto.com/9176790/1532886