天天看点

【DEVOPS】SVN Server迁移 - 从VisualSvnServer到iF.SVNAdmin

将原本部署在Windows服务器下的SVN服务端VisualSvnServer迁移到Linux下的iF.SVNAdmin,实现基于浏览器端的SVN管理,提升管理体验,降低管理成本。

0. 目录

      • 1. 前言
      • 2. 注意事项 - iF.SVNAdmin安装
      • 3. 注意事项 - 现有仓库迁移
          • 3.1 仓库本身的迁移
          • 3.2 用户的迁移
          • 3.3 权限的迁移
      • 4. 优化
      • 5. Links

1. 前言

现有SVN服务端管理每次需要远程登录服务器的痛苦如同压抑良久的火山终于爆发,部门近期终于下定决心将SVN Server从VisualSvnServer迁移到iF.SVNAdmin。

本文将介绍将VisualSvnServer所管理的现有SVN仓库迁移到iF.SVNAdmin中时候的一些注意事项。

2. 注意事项 - iF.SVNAdmin安装

关于iF.SVNAdmin的安装,网上已经有了非常详尽的资料(可参见底部链接),并且 iF.SVNAdmin的最近一次更新追溯到2013年,因此也不用担心网上资料时效性的问题,因此笔者这里就不再拾人牙慧。

以下笔者仅就个人在安装过程中遇到的一些典型问题进行总结:

  1. Error: Could not copy configuration file template. Require write permission (777) to "data" folder and all containing files.

    把SELinux状态状态改为disabled并重启电脑。在终端输入 setenforce 0(临时关闭),永久关闭参考:https://jingyan.baidu.com/article/851fbc37a05a0d3e1f15abe3.html。
  2. 访问错误日志查询。

    在iF.SVNAdmin的架构体系下,响应请求的其实是Apache所提供的服务,因此相关的错误日志,我们可以从

    /etc/httpd/logs/error_log

    下进行寻找。
  3. SVN访问地址。

    svnadmin的管理页面为 http://ip/svnadmin,而与之对应的,每个仓库的访问地址则为 http://ip/svn/{仓库名}

3. 注意事项 - 现有仓库迁移

3.1 仓库本身的迁移

关于这一块,笔者本来打算直接采取复制VisualSvnServer下指定仓库到iF.SVNAdmin对应目录下的方式来完成的,但是在实际的操作过程中发现现实并没有那么美好,迁移过来的仓库要么无法正常展示仓库层级,要么甚至网页都报错。

无奈之下祭出最为稳妥的方式: 备份还原大法:

#################### VisualSvnServer(Windows Server下), 使用svnadmin进行指定仓库的备份
### 千万注意: 以下操作必须在CMD下进行, 切勿使用powershell
# PATH-TO-REPO - SVN 项目仓库目录
# PATH-TO-DUMP - 导出SVN项目仓库dump目录文件名
svnadmin dump PATH-TO-REPO > PATH-TO-DUMP

# 范例
cd d:/SVN/Repositories/
svnadmin dump ./DEVOPS > D:/fulizhe/DEVOPS

#################### iF.SVNAdmin(Centos7下), 依然是使用svnadmin进行指定上述svn备份库的还原
# 1. 首先使用 iF.SVNadmin的浏览器管理工具创建一个空的SVN仓库(这里注意直接选择"空库")
# 2. 使用svnadmin进行上述svn备份库的还原
#		PATH-TO-NEW-REPO - SVN 项目仓库目录
#		PATH-TO-DUMP - 已保存的SVN项目仓库dump文件
svnadmin  load PATH-TO-NEW-REPO < PATH-TO-DUMP

# 范例
svnadmin  load /var/www/svn/DEVOPS/ < /root/DEVOPS


           
3.2 用户的迁移

迁移完仓库,接下来就该迁移SVN用户。关于这一点,得益于SVN服务端本身良好的设计,这一块工作量很少。

VisualSvnServer仓库根目录下有:

  1. 一个名为

    htpasswd

    的文件,其中存在着用户信息,将其拷贝到 iF.SVNAdmin中的 passwd 文件里即可。
  2. 一个名为

    groups.conf

    的文件,其中存在着分组信息。
3.3 权限的迁移

依次对VisualSvnServer中的仓库完成上述3.1小节的操作之后,我们将得到完整提交日志的SVN仓库。接下来我们要做的是将原本在VisualSvnServer中配好的权限管理迁移到iF.SVNAdmin下。

得益于SVN服务端本身良好的设计,这一块工作量也很少。

  1. VisualSvnServer下针对每个仓库的权限配置存放在每个仓库文件夹下的

    VisualSVN-SvnAuthz.ini

    中(例如:

    F:\Repositories\{RepositoryName}\conf\VisualSVN-SvnAuthz.ini

    )。
  2. 复制上述文件中的权限配置项,粘贴到iF.SVNAdmin中的authz文件中(形如

    /var/www/svn/authz

    ),形如:
    [DEVOPS:/]              # 仓库根目录, 这一部分由当前所操作的仓库名决定
    admin=rw                      # 用户权限,这一部分正是从第一步中拷贝而来
    @agroup-read=r           # 组权限,这一部分正是从第一步中拷贝而来
               

4. 优化

使用iF.SVNadmin代替VisualSvnServer进行SVN管理之后,确实杜绝了每次SVN服务端操作需要登录远程服务器的窘境,但iF.SVNadmin的权限配置这一块确实不如VisualSvnServer来的方便,你必须手动输入需要进行权限配置的SVN目录,这是笔者目前体验下来最大的痛点,还有就是即使在进行了iF.SVNadmin的迁移之后,SVN仓库创建以及权限的分派之初,依然是一个相当明显的重复枯燥工作。

我们完全可以考虑借助Jenkins + Ansible 来将SVN仓库的创建和权限维护操作自助化。

5. Links

  1. iF.SVNAdmin官网
  2. centos7搭建SVN+Apache+IF.svnadmin支持https实现web管理SVN
  3. CentOS 安装SVN以及可视化管理工具iF.SVNAdmin

继续阅读