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/ [email protected]::svn_coding --password-file=/etc/rsync_svn.pas
#/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 [email protected]$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自动更新成功,是参考彪哥写的钩子程序。彪哥是大神哇。我们只能膜拜了。
svn+钩子程序+rsync 自动化同步代码