CentOS下搭建SVN服务器和同步Web服务器

CentOS下安装SVN服务器

1.安装SVN

$ yum install -y subversion

subversion 安装在/usr/bin目录下:

$ which svnserve
/usr/bin/svnserve

2.验证安装是否成功

svnserve --version

killall svnserve  //关闭
svnserve -d -r /opt/svn/   //重启
ps -ef|grep svnserve //查看

3.创建版本库

$ mkdir -p /opt/svn/svnrepos
$ svnadmin create /opt/svn/svnrepos

执行上面的命令后,自动建立svnrepos库,查看/opt/svn/svnrepos

文件夹发现了包含conf, db, format, hooks, locks, README.txty等文件

subversion目录说明:
*db目录:就是所有版本控制的数据存放文件
*hooks目录:放置hook脚本文件的目录
*locks目录:用来放置subversion版本库锁定数据的目录,用来追踪存取文件库的客户端
*format文件:是一个文本文件,里面只放了一个整数。表示当前文件配置的版本号
*conf目录:是这个仓库的配置文件(仓库的用户访问账号、权限等)

4.添加用户

$ vi /opt/svn/svnrepos/conf/passwd
[users]
# harry = harryssecret
# sally = sallyssecret
pm = pm_pw
server_group = server_pw
client_group = client_pw
test_group = test_pw

5.用户权限控制

$ vi /opt/svn/svnrepos/conf/authz文件
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
admin = zhangcy,liuzz,shenkun
user = yangxt,maym,lizh,dongyan

为权限组分配权限
[/]
@admin = rw
@user = rw
* =

r表示对该目录有读权限,w表示对该目录有写权限,rw表示对该目录有读写权限。

最后一行的* =表示,除了上面设置了权限的用户组之外,其他任何人都被禁止访问本目录。这个很重要,一定要加上!

6.修改svnserve.conf文件,让用和策略配置生效

[general]
anon-access = none
auth-access = write
password-db = /opt/svn/repositories/conf/passwd
authz-db =/opt/svn/repositories/conf/authz

7.启动SVN服务器

svnserve -d -r /opt/svn/svnrepos 或者指定端口号启动服务器 svnserve -d -r /opt/svn/svnrepos --listen-port 3391

svn默认监听3690端口

使用SVN Hook实现服务器端代码自动更新

编写一个post-commit钩子脚本来实现服务器端代码的自动更新,它在SVN每次commit之后运行。

服务器SVN版本仓库中,进入某个项目,有个一个hooks文件夹,进入hooks文件夹,创建一个post-commit文件:

#!/bin/sh
REPOS="$1"
REV="$2"
export LC_ALL="zh_CN.UTF-8"
export LANG="en_US.UTF-8"
# svn安装路径
SVN_PATH=/usr/bin
# web项目所在目录
WEB_PATH=/home/wwwroot/****

# svn用户名
SVN_USER=admin
SVN_PASS=123456
LOG_PATH=/tmp/svn.log
$SVN_PATH/svn update $WEB_PATH || exit 1
exit 0
WEB服务器checkout代码
cd /home/wwwroot
svn co --username xxxxx --password 123456 svn://192.168.1.111/svnrepos

检查post-commit权限

post-commit 脚本文件的权限不对,post-commit 脚本必须有 +x 权限。

chown svn:svn post-commit
chmod +x post-commit