linux搭建svn自动更新测试环境

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的路径




你可能感兴趣的:(Linux)