公司的业务模块比较多,每个模块有生产环境和测试环境,而且生产环境又有若干的服务器(有主有备),之前升级是用RSYNC加shell脚本进行升级的,随着模块和服务器的增多,升级频率增加,升级和修改配置简直让人发指。打算改进一下公司的升级流程,基于VCS,个人看好git,但是开发都在用svn,而且基本上没怎么用过git,为了能减少学习成本,并方便和现有svn服务器对接,打算采用svn,代码发布打算试试svn+hook或者svn +capistrano。下面记录的是svn server的搭建过程。

SVN作为老牌版本控制系统,目前由apache基金会开发,文档、客户端等都比较成熟,用请来很省心。

服务器有两种运行方式:
独立服务器 : svn://xxx.com/xxx
ApacheSvn (apache+mod_dav_svn) : http://xxx.com/xxx
因为是测试,就懒一点,采用独立服务器方式。服务器是64位centos6.5,同时关闭了iptables和selinux

1.安装svn服务器

yum install subversion

2.创建svn主目录

mkdir /opt/svn

所有的svn文件都存在此目录中。

3.新建版本仓库

svnadmin create /opt/svn/repos

目录中会出现conf、db、format、hooks、locks、README.txt等文件或目录,说明svn仓库已经建立成功了。同时为了规范,一般会在项目目录下再创建:trunk、tags、branches、test等目录。

4.添加用户

在repos/conf/passwd文件中[users]下添加“username = password”即可。
如果不想使用明文密码,可以使用ApacheSvn配合htpasswd命令创建密码认证文件。支持md5,SHA等加密。

5.设置用户访问策略

配置文件为 repos/conf/authz,可以配置用户组,用户权限和项目权限

按照文件里的例子写就可以,用户组格式:
[groups]
admin = rd1,rd2 //用户组可以包含1个或多个用户,用户间以逗号分隔

版本库目录格式:
[<版本库>:/项目/目录]
@<用户组名> = <权限>
<用户名> = <权限>

权限主体可以是用户组、用户或 *,用户组在前面加@,*表示全部用户。
权限可以是w、r、wr和空,空表示没有任何权限。
这里注意一下,组名和用户名不要一样,否则一些目录提交,删除等操作时会出现access deny的情况。

6.配置svnserver.conf

[general]
anon-access = none     //匿名无访问权限
auth-access = write    //认证用户有权限
password-db = passwd   //密码配置文件路径,默认为conf目录的passwd
authz-db = authz       //认证后权限配置文件,默认为同目录的authz文件
realm = MY SVN Repos   //认证时显示的标识

7.启动svnserver

svnserver -d -r /opt/svn/repos

启动后默认使用 3690端口,如果开了访问墙要打开这个端口。
注意,修改passwd文件和authz文件不需要重启svnserver,修改svnserver.conf文件需要重启svnserver.
启动之后就可以用tortoisesvn等客户端测试了。

参考文章
http://www.ha97.com/4467.html
http://300second.blog.51cto.com/7582/780348