Linux + docker + svn +IF.SVNAdmin构建私有化代码托管平台

需求

周一接到同事需求,因为服务器即将到期,需要更换到Linux服务器,因此公司的线上SVN需要进行迁移。新的SVN需提供svn: 与http: 两种代码推送方式。我真的是栓Q了,怀着小抱怨的心情接下了任务,就当闲暇时光娱乐吧。 特此注意:文中提到的http: 与svn:推送/拉取方式对应的是,咱们在Windows 安装的客户端下的代码地址,比如说:svn://ip:端口号/svn/xxx 和 http://ip:端口号/svn/xxx

选择SVN版本

由于docker的便利以及笔者本身就很倾向于docker, 因此采用docker进行SVN搭建(若未安装docker环境的,请自行安装docker环境吧)。docker search svn 一下,发现garethflowers与elleflorio 两个版本非常受到大众喜爱,因此去 https://hub.docker.com/ 对比了两个镜像,对比结果garethflowers不提供WebSvn且http还要自己配置,而elleflorio 内置了httpd,支持svn:与http: 两种模式进行代码拉取与推送,并且镜像本身内置了IF.SVNAdmin的可视化管理平台,创建资源库、管理用户及授权访问等比较方便。果断选择elleflorio。

在这里插入图片描述

SVN搭建及原Windows系统下SVN代码迁移

SVN搭建

执行步骤:

  1. 拉取svn镜像:
    • docker pull elleflorio/svn-server
  2. 创建svn仓库挂载目录:
    • mkdir /home/code-trustee/docker-svn/repo
  3. 给予仓库挂载目录权限为777,否则IF.svnadmin无法创建仓库目录,且推送代码时会出现权限不允许:
    • chmod -R 777 /home/code-trustee/docker-svn/repo
  4. 运行容器,将容器中的subversion-access-control与passwd复制到本地作为挂载文件:
    • docker run --privileged=true -d --name svn-server -p 8011:80 -p 3690:3690 -v elleflorio/svn-server
    • docker cp svn-server:/etc/subversion /home/code-trustee/docker-svn/subversion (docker复制命令)
  5. 停止并删除容器
    • docker stop svn-server
    • docker rm svn-server
  6. 运行并挂载配置文件启动 (8073是http端口,一定要打开后边访问IF.SVNAdmin与http: 推送/上传代码方式必备, 8074是svn:推送/上传端口, 8073、8074是笔者的端口号,可以根据自己的需要设置为其他的端口号
    • docker run --privileged=true -d --name svn-server -p 8073:80 -p 8074:3690 \
      -v /home/code-trustee/docker-svn/repo:/home/svn \
      -v /home/code-trustee/docker-svn/subversion/subversion-access-control:/etc/subversion/subversion-access-control \
      -v /home/code-trustee/docker-svn/subversion/passwd:/etc/subversion/passwd \
      elleflorio/svn-server 在这里插入图片描述
  7. 运行后查看日志docker logs svn-server若出现ServerName 报错,则进入容器修改httpd.conf后再重启
    • docker exec -it svn-server /bin/sh
    • cd /etc/apache2/
    • vi httpd.conf
  8. 找到ServerName,去掉注释或者Copy一行,修改为自己的域名或IP+端口(容器映射http端口: 8073)
    • ServerName localhost:8073
      在这里插入图片描述
  9. 重启容器
    • docker restart svn-server
  10. 至此,svn咱们就搭建完毕了, 现在咱们就可以去拉取/推送代码了,svn://ip:8074/svn/xxx 和 http://ip:8073/svn/xxx

原Windows系统SVN代码迁移

步骤:

  • 进入Windows SVN server -> 点击仓库右键,选择所有任务 -> Export Repository… -> Export repository dump -> 定义名称xxx.dump, 选择保存到D盘 -> 将dump 文件上传到linux至svn-server挂载的目录/home/code-trustee/docker-svn/repo下 -> 执行命令docker exec -it svn-server /bin/sh进入svn-server 容器中 -> cd /home/svn 下可以看到挂载进来的dump文件 -> 执行svnadmin create /home/svn/test 创建新的svn仓库test(仓库名与原仓库名可以不一致) -> 执行svnadmin load test < xxx.dump -> 等待一会儿,便导入成功。

在这里插入图片描述
在这里插入图片描述

IF.SVNAdmin 图形化管理平台

平台配置

浏览器访问,http://ip:8073/svnadmin,首次便可进入IF.SVNAdmin 的配置页面。依次填入:

  • Subversion authorization file: /etc/subversion/subversion-access-control
  • User authentication file (SVNUserFile):/etc/subversion/passwd
  • Parent directory of the repositories (SVNParentPath):/home/svn
  • Subversion client executable:/usr/bin/svn
  • Subversion admin executable:/usr/bin/svnadmin

在这里插入图片描述
保存配置后,会自动创建账号admin, 密码也是admin。 浏览器访问:http://ip:8073/svnadmin/login.php登录平台便可。

平台介绍 (仅支持http: 推送/拉取方式,svn: 方式无效

基础介绍

登录平台后,可以查看到导航仓库 + 用户 + 组 + 访问路径 + 设置 + session。

  • 仓库:svn仓库管理,若已导入SVN的仓库,则现在就可以看到导入的代码了
  • 用户:点击用户导航可以查询用户列表和添加用户。(所有的人员访问为用户*, 默认*是read权限)
  • 组:添加组和将用户分到对应的组
  • 访问路径:配置访问的仓库路径,“/” 为仓库的根路径,配置在“/”路径下则可用访问所有的仓库路径。
  • 设置:平台配置,我们首次登陆已经配置好,无需再配置
  • seesion: 修改密码,退出功能

在这里插入图片描述

特殊功能介绍

1.用户列表:查看用户列表,点击“选择角色“会出现以下角色介绍列表。用户可根据自己的需要,勾选用户 -> 选择角色 (下拉框) -> 分配。一定要记住给新建的账号分配“用户” 这个角色,不然无法登录后台。其他角色可以选择添加。(平台一次性只能选择一个角色,若要选择多个角色还需要再次选择角色配置)

在这里插入图片描述

  1. 访问路径: 点击导航栏,会出现“列表、添加、权限”三个选项,添加可以添加相关的访问路径,权限则是为每个用户分配访问权限。“/” 为根目录路径,配置了该路径的用户,可以访问所有仓库。咱们可以直接点击“权限“直接给用户分配指定的访问路径。

访问路径列表
点击“权限”后
在这里插入图片描述

权限分配完毕后,回到访问路径管理列表,点击对应的路径栏,可以看到该路径下的人员,“/” 是根路径,目录下有“*”用户,这个用户是代表所有访问人权限,默认为read,即任何人只要知道svn地址都可以进行拉取代码,无需任何用户名密码。这不是扯犊子了吗? 必须要设置为no-access。 (请注意:Read 对应的是拉取, Write 对应的是推送)

在这里插入图片描述

  1. 代码仓库:点击导航"代码仓库",平台系统默认”代码仓库管理员”角色是不提供删除仓库功能和导出功能的,即不会出现以下红色标注的地方。“我一个超管,你居然不让我删库,你不是逗我吗?” 满脑袋都是这个想法让我不得不去设置删库权限。
    步骤:
    • 进入容器:docker exec -it svn-server /bin/sh
    • 查询配置文件:find -name config.ini
    • 修改配置文件:vi /opt/svnadmin/data/config.ini , 拉倒文件最后如下图2所示,将[GUI]下的权限开启为ture.
    • 修改完后,退出svn容器,重启svn容器便可

.
在这里插入图片描述

RepositoryDeleteEnabled 指的是删除权限,RepositoryDumpEnabled 指的是导出权限,
AllowUpdateByGui 指的是版本更新权限。
按需开启吧!!!
在这里插入图片描述

注意事项

  1. IF.SVNAdmin 只是配置http: 方式推送/拉取的情况,如果要处理svn: 方式的推送/拉取,就需要到仓库下进行配置文件改写了。由于我们已经挂载到了/home/code-trustee/docker-svn/repo 目录下,那我们直接进入到该目录,进入到仓库文件夹中,conf下会出现authz、passwd、svnserve.conf 三个文件,其中authz 为权限文件,passwd 为用户名&密码文件,svnserve.conf 为该仓库的配置文件。由于配置简便,不在阐述,可以自行百度配置便可。

在这里插入图片描述

  1. 如果地址访问不通,需要查看一下ip是否写错,服务器端口号是否已开通。8073是http端口号,8074是svn端口号,切记别弄错。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值