ReviewBoard + SVN 集成 Windows搭建指南

文档 Apr 14, 2023

Review Board 是一款开源的基于 Web 的代码和文档审查工具,旨在帮助公司、开源项目和其他组织保持高质量、低缺陷数。

Review Board 跟踪你的待定代码、图形、文档以及所有关于你的产品决策的讨论。我们的差异查看器不仅仅显示差异:它会精确地展示你的代码如何被修改,并使用语法高亮、差异之间的比较、移动行检测、缩进更改指示器等功能。你可以使用 Review Board 的丰富 API 和扩展框架进行集成,以实现定制的功能、审查 UI、数据分析等,而无需分支 Review Board。对于 Bazaar、ClearCase、CVS、Git、Mercurial、Perforce、Plastic 和 Team Foundation Server 的支持,维托服务器上或者使用 Assembla、Beanstalk、Bitbucket、Codebase、GitHub、GitLab、Gitorious、Kiln 或 Unfuddle 托管。

使用 docker-compose 安装 ReviewBoard

安装 Docker-Desktop-Windows

参考官方文档下载和安装 Docker-Desktop-Windows。安装完后需重新启动系统。

获取官方提供的 docker-compose 配置样例

打开官方 Github 仓库,选择你想安装的版本并下载源码。

将源码中的 contrib\docker\examples 目录解压至你想保存 docker-compose 配置文件的目录(如:G:\ReviewBoard

根据你想使用的数据库(mysql or postgres),保留下列文件其中之一,删除另一个:

  • docker-compose.mysql.yaml: 使用 MySQL 数据库的配置.
  • docker-compose.postgres.yaml: 使用 postgres 数据库的配置.

将你选择的 yaml 文件改名为 docker-compose.yaml

参考官方 docker-compose 文档,修改其中的配置项:

  • 将所有的 localhost 修改为你的域名或者本机 IP(注意不能使用 127.0.0.1,否则容器内的实例可能无法访问其他容器)。
  • 将下面的数据库密码更改为更安全的密码。 对于 MySQL,请查看 docker-compose.yaml 文件中的 MYSQL_ROOT_PASSWORDMYSQL_PASSWORD和DATABASE_PASSWORD。 对于 Postgres,请查看 POSTGRES_PASSWORDPOSTGRES_RB_PASSWORDDATABASE_PASSWORD
  • 请为您的服务器更改公司名称。请查看 docker-compose.yaml 文件中的 COMPANY
  • 浏览此文件并搜索 CHANGEME,查找其他可能想要更改的设置。
  • 修改 memcached 容器的配置如下:
memcached:
    image: memcached:alpine
    restart: 'on-failure'
    ports:
      - 11211:11211
    entrypoint:
      - memcached

      # The amount of RAM available for memcached.
      #
      # CHANGEME: Set this to a suitable amount for your server. We recommend
      #           at least 2GB in production (2048).
      - -m 2048
  • 运行: docker-compose up
  • 访问:http://<hostname>/

设置 ReviewBoard 管理后台

访问:http://<hostname>/admin 打开管理后台,默认账号 admin,密码为 admin,登录后建议立即修改。

修改 General 配置并保存:

  • TimeZone:改为你所在的时间,如 Asia/Shanghai
  • Cache Backend:改为 Memcached(recommanded)
  • Cache hosts:改为 hostname:11211

添加代码仓库:

  • 左侧列表选择 MANAGE->Repositories
  • 在打开的新页面选择 Add new Repository,在打开的新页面填入对应的信息。需要注意的是,点击下方 ADVANCED SETTINGS 边上的 SHOW,在 encoding 中填入你的代码使用的编码,我们的是 GBK。点击保存。

安装 RBTools

RBTools 是一组命令行工具,用于与 Review Board 和 RBCommons 一起使用。它的作用是帮助您快速将代码提交到审核中,查看更改的状态,并最终将代码加入代码库等其他用途。

RBTools 与您的仓库官方命令行工具进行接口,使得生成适当的差异或在任何受支持的仓库类型中应用更改变得容易,而无需学习不同的工具集。

除了各种有用的命令外,RBTools 还提供了针对 Review Board 的强大 Python 客户端 API,让您有弹性开发自己的集成应用。

官方网站下载 RBTools 并安装。

修改默认 encoding,解决 RBTools 解码错误的问题(如果你的代码用的是 utf-8,可以跳过这步):

  • 用任意编辑器打开 安装路径\RBTools\Python\Lib\site-packages\RBTools-4.0-py3.10.egg\rbtools\utils\process.py
  • 搜索 def run_process(
  • 找到 encoding: str = 'utf-8',,将 utf-8 改为你需要的 encoding,如:GBK

修改 Nginx 上传文件大小限制

使用 RBTools 生成 diff 上传时,可能超过 Nginx 的上传大小限制,因此需要修改 Nginx 的配置:

  • 打开 docker-desktop-windows,选择 Containers,找到 Nginx 容器。
  • 点击容器名->Files,在下面的列表中找到 /etc/nginx/nginx.conf,在 http 配置块中增加一行:
client_max_body_size 100M;

保存并退出。

  • 重启 Nginx 容器。

安装 GnuDiff

RBTools 需要使用 GnuDiff 工具用来生成 diff 文件进行上传,因此需要安装 GnuDiff

  1. 访问 http://gnuwin32.sourceforge.net/packages/diffutils.htm 并下载 "Complete package, except sources" 安装程序。
  2. 运行下载的安装程序并按照提示进行安装。默认情况下,GNU Diff 将安装到 C:\Program Files (x86)\GnuWin32\bin 目录。
  3. 将 GNU Diff 的安装目录添加到系统的 PATH 环境变量中。这是为了确保 RBTools 可以找到并使用 GNU Diff。按照以下步骤操作:
1. 在 Windows 搜索框中输入 "环境变量" 并选择 "编辑系统环境变量"。
2. 在 "系统属性" 对话框的 "高级" 选项卡上,点击 "环境变量" 按钮。
3. 在 "系统变量" 列表中,找到名为 "Path" 的变量,然后点击 "编辑"。
4. 点击 "新建" 并输入 GNU Diff 的安装目录,例如 C:\Program Files (x86)\GnuWin32\bin。
5. 点击 "确定" 以保存更改并关闭所有对话框。

重新启动命令提示符窗口(以便新的 PATH 设置生效)。

生成 RBTools 配置文件

  • 打开命令行,进入你的 SVN 副本所在的目录。
  • 运行:
rbt setup-repo

根据提示输入内容,其中大部分可以在管理后台的仓库设置处找到。

生成成功后,会在目录下生成一个 .reviewboardrc 文件,将这个文件提交到 svn 后就可以复用了。

使用 RBTools

打开命令行,进入你的 SVN 副本所在的目录。

  1. 将当前所有未提交的修改,生成评审:
rbt post

2. 将指定 svn 版本号提交评审:

rbt post [revision]

3.  将指定 svn 版本号提交评审,并设为发布:

rbt post --publish [revision]

也可以直接在 .reviewboardrc 文件中增加:

PUBLISH = True

更多使用方法,可参考官方文档

常见错误
配合SVN使用时,必须指定SVN仓库的根目录为Repository的path,否则将遇到 Error validating diff 错误。
如果确实碰到无法指定SVN仓库根目录的情况(比如没有权限),那么解决办法是将Repository的path设置为需要的子目录,然后RBTools的源代码。找到RBTools源码中的 svn.py ,注释以下两行:

diff_lines = self.convert_to_absolute_paths(diff_lines,
                                                    repository_info)

在本地checkout对应的子目录,并且在子目录中使用rbt post提交。

标签