1.安装svn服务器端
yum install subversion
2. 配置svn并启动svn服务,可以使用svnserve --help查看启动帮助,其中箭头指出来的配置项比较常用
指定svn的数据存储路径
mkdir -p /var/svn/svnrepos
指定svn的配置文件信息路径
mkdir -p /var/svn/users/svnpasswd
启动svn服务
svnserve -d -r /var/svn/svnsvnrepos/
3.使用svnadmin建立svn项目版本库
查看创建项目版本库命令
svnadmin --help
svnadmin help create
创建mall版本库
svnadmin create /var/svn/svnrepos/mall
4. 配置mall版本的权限
进入mall版本库配置目录,并备份配置文件
cd /var/svn/svnrepos/mall/conf/
cp -p svnserve.conf svnserve.conf.default
进行详细配置
#匿名访问的权限,可以是read,write,none,默认为read
anon-access = none //禁止匿名访问
auth-access = write //使授权用户有写权限
password-db = /var/svn/users/passwd //密码数据库的路径
authz-db = authz //指定权限认证文件
#认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字
realm=/var/svn/svnrepos/mall
5. 复制passwd文件到/var/svn/users目录并修改权限
执行如下命令完成操作
cp -p authz passwd /var/svn/users/
cd /var/svn/users/
ll
chmod 700 passwd
ll
6. 为Svn版本库创建用户并授权访问指定项目版本库
编辑passwd文件配置用户和密码
vi passwd
xingmaogou = xingmaogou
xingyuan = xingyuan
编辑authz文件配置读取权限
[<版本库>:/项目/目录]
@<用户组名> = <权限>
<用户名> = <权限>
7. 重新启动svn服务进行验证
杀死svn服务
pkill svnserve
启动svn
svnserve -d -r /var/svn/svnrepos
备注:修改passwd和authz文件不需要重启svn服务而修改svnserve.conf则需要
8. 配置防火墙端口(如果需要)
不一定每个人都需要设置,可以先测试后再看是否需要打开端口
# vi /etc/sysconfig/iptables
添加一下内容:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
保存后重启防火墙
# service iptables restart
9. 查看
a. 启动SVN
# svnserve -d -r /opt/svn/repositories
b. 查看SVN进程
# ps -ef|grep svn|grep -v grep
root 12538 1 0 14:40 ? 00:00:00 svnserve -d -r /opt/svn/repositories
c. 检测SVN端口
# netstat -ln |grep 3690
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN
10. 停止重启SVN:
# killall svnserve //停止
# svnserve -d -r /opt/svn/repositories // 启动
Svnserve.conf 配置示例
[general]
anon-access = none
auth-access = write
password-db = /var/svn/users/passwd
authz-db = authz
realm = /var/svn/svnrepos/mall
[sasl]
Authz配置示例
[aliases]
[groups]
[mall:/]
mjq = rw
auto_up = rw
11.使用post-commit实现自动部署
搭建svn都不是仅仅为了把代码存到仓库,而是同步部署到对应的项目。
在 svn 目录的 /hooks里面有一堆tmpl,这些tmpl可以做很多事情,不过今天我们就说一下自动部署post-commit.tmpl。
tmpl文件是模版文件,我们要用post-commit需要手动复制对应tmpl里面的内容到新的post-commit里面
cp post-commit.tmpl post-commit
step.1:
然后打开文件清空内容,修改为以下代码:
#!/bin/sh
export LANG=zh_CN.UTF-8
/usr/bin/svn update --username **** --password **** /var/www/test
其中第一行意思是:用sh来解析这个脚本,因为各种shell的语法有细微的差别
第二行是编码格式:这里我使用的是UTF-8
最后一行/usr/bin/svn 是svn的路径,不是项目路径,应该都是一样的,后半句分别是用户名、密码、和项目路径。--username这个比较坑了,网上搜出来的很多都搞错了,前面其实是两个减号,英文输入法下的。
step.2:
修改post-commit的可执行权限
chmod 755 post-commit
step.3:
在服务器进入项目目录/var/www/test checkout 整个项目。
注意此处不要checkout文件夹,正确代码应该是这样:
svn checkout svn://{您的服务器地址}:{端口号}/test . //注意目录后面还有一个点
注意:此处的/test 可不需要添加:( 添加的目的是为了实现多个项目。 )
svn checkout svn://{您的服务器地址}:3690 . //注意目录后面还有一个点
至此,如果按照此步骤搞下来,应该已经没有问题了,你可以本地commit代码,自动同步到项目了。
ps:常见错误,我遇到的
1.
255错误:post-commit没有给执行权限 或者 头部没有执行用sh执行,就是没有#!/bin/sh
2.
提示跳过目录:服务器目录没有checkout代码,记得一定要先checkout一次,才能同步(!,每次新建项目都需要)
3.
什么提示也没有:这种情况出现在用工具commit的时候,成功了,但是就是没有同步,建议你到linux下,使用./post-commit手动执行看报什么错误。如果乱码,请将文件内编码格式修改为GBK
4.
提示**** is a direcitory:/usr/bin/svn你把这个搞错了,他不是一个目录,是svn的路径