Centos7 搭建svn服务器

#预期目的:
a.仓库放在 /var/svn/ 目录下,并且仓库名为 project
b.创建用户组lsgogroup,该组下添加两个成员lsgoweb1、lsgoweb2,密码直接用用户名,两用户可以checkout代码和提交代码
c.利用SVN的钩子实现当仓库的代码更新的时候自动同步至我们的web(项目)目录 项目目录为/home/webroot/demo
一、搭建svn环境并创建仓库:
1、安装Subversion:
yum install -y subversion
2、检测是否安装成功(查看svn版本号)
svnserve --version
3、创建版本库
#先创建svn总仓库目录
mkdir /var/svn
cd /var/svn
#在总仓库中创建版本库
svnadmin create /var/svn/project
cd project
#会看到自动生成的版本库文件
conf  db  format  hooks  locks  README.txt
至此,svn环境搭建成功。


二、创建用户组及用户:
1、 进入版本库中的配置目录conf,此目录有三个文件: svn服务综合配置文件(svnserve.conf)、 用户名口令文件(passwd)、权限配置文件(authz)。
2、修改权限配置文件:vim authz
#进入后大约在21行有一个


[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe


在其下面追加代码[作用是 创建用户组lsgogroup并添加两个用户lsgoweb1,lsgoweb2到该用户组中]:
lsgogroup = lsgoweb1,lsgoweb2


#大约32行左右有一个


# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r


在其下面追加代码[作用是 使用户组lsgogroup对版本库project具有读和写的权限]:
[project:/]
@lsgogroup = rw


#追加完后wq保存退出[注:追加的代码必须顶格写]


3.配置用户名命令文件:vim passwd
#进入后大约第6行有一个


[users]
# harry = harryssecret
# sally = sallyssecret


在其下面追加代码[作用为 添加两个用户lsgoweb1,lsgoweb2以及密码,密码暂时同用户名]:
lsgoweb1 = lsgoweb1
lsgoweb2 = lsgoweb2


#追加完后wq保存退出[注:追加的代码必须顶格写]


4、配置SVN服务综合配置文件svnserve.conf
#找到以下配置项,将前面的#号去掉,然后做相应的配置


anon-access = none  //匿名用户访问权限:无
auth-access = write     //普通用户访问权限:读、写
password-db = passwd        //密码文件
authz-db = authz        //权限配置文件
realm = /var/svn/project    //版本库所在目录


注意:所有以上的配置项都需要顶格,即前面不能预留空格,否则报错


5、启动svn服务:
svnserve -d -r /var/svn


=======================================================================
ps:如果提示:
svnserve: E000098: Can't bind server socket: Address already in use
证明现在svn已经被启动了,由于我们修改了配置文件,因此要重启svn服务
方法一:
#查看svn服务详情,找到svn服务的ID号
ps aux | grep svn
#将svn服务强制停止  其中790为svn服务的ID号,-9是kill的参数
kill -9 790
方法二:
killall svnserve




再运行 svnserve -d -r /var/svn,进行启动服务
========================================================================
6.#编辑防火墙配置文件 输入命令
vim /etc/sysconfig/iptables
#打开后,在 -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT 下方添加:
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3690 -j ACCEPT
#保存退出
#最后重启防火墙使配置生效
systemctl restart iptables.service


7、此时svn已经搭建完成,地址为
svn://服务器IP(如果是在本服务器上用到svn地址,此处为loclhost)/project(版本库名称)




三、实现svn更新自动同步到web目录:
1、在项目目录(/home/wenroot/demo)中checkout版本库
svn co svn://localhost/project /home/webroot/demo --username lsgoweb1 --password lsgoweb1


#进入/var/svn/project/hooks下,建立post-commit文件:
cd /var/svn/project/hooks
vim post-commit


#在该文件里添加如下代码并保存


#!/bin/sh
#设定环境变量,如果没有设定可能会出现update报错
#设定语言,根据系统语言设置,如果是GBK就设置为 LANG=zh_CN.GBK
export LANG=en_US.utf8
SVN_PATH=/usr/bin/svn
WEB_PATH=/home/webroot/demo
$SVN_PATH update $WEB_PATH --username 'lsgoweb1' --password 'lsgoweb1' --no-auth-cache


#添加后wq保存退出


####post-commit添加的代码解释####
#!/bin/sh #设定环境变量,如果没有设定可能会出现update报错
export LANG=en_US.utf8 #设定语言,根据系统语言设置,如果是GBK就设置为 LANG=zh_CN.GBK
SVN_PATH=/usr/bin/svn #这里不用改
WEB_PATH=/home/webroot/demo #web目录(项目目录),如果你的不同,可以改
$SVN_PATH update $WEB_PATH --username 'lsgoweb1' --password 'lsgoweb1' --no-auth-cache #填写自动更新使用的用户账号密码,这里的用户随便选一个就好


2.修改post-commit文件的属主属组与你的项目目录属主属组相同(一般不用改 都是root)
chown root:root post-commit


3.给post-commit 执行权限:
chmod 755 post-commit

你可能感兴趣的:(Linux)