REVIEWBOARD 使用说明和强制review的配置方法

来源:互联网 发布:沙河网络服装批发市场 编辑:程序博客网 时间:2024/06/06 09:15

去年末才第一次接触的reviewboard系统,开源的代码审核,方便,快捷,当然也存在诸多开源软件的潜在bug多、说明文档不细致等特点,部署在公司的服务器上后,运行了近一年的时间,还算平稳高效,最近闲下来吧当初写给公司同事的rb系统使用说明和配置强制review的方法整理了一下发出来,希望能帮助到其他用户。

一、 工作流程

  1. 在本地代码做出一个修改。
  2. 为你新做的修改创建一个评审请求。
  3. 发布评审请求。
  4. 等到评审者的反馈。
  5. 评审没有问题,则在log-message中写清reviewID并提交变更至配置库,并且切换评审单状态为“submitted”。
  6. 评审有问题的,修改程序,需要重新更新DIFF文件(如果有),重新进行评审。

二、手动发起请求(推荐使用自动rbtools方式)

  1. 修改文件后,使用tortoise工具生成一个diff文件,方法是在文件或文件夹上右键点击选择TortoiseSVN-> Create Patch
  2. 登陆系统,点击导航栏New Review Request,发起新的申请。
  3. 点击左侧你要上传的文件对应的svn库,点击右侧select上传你生成的diff文件。
  4. 复制或输入你修改的文件相对于svn库根目录的路径。
  5. 输入各项信息:
    Summary(必填):标题、总结,显示在review申请的题目上。
    Description(必填): 描述。
    右侧:
    Reviewers(必填):审核人,在people处点击,手动输入审核人的姓名或者用户名都可以,系统会在输入时自动搜索并显示提示。如果是提交给某一个组来审核,就在Groups点击进行指定,二者至少填写一项。
    Bug:本处填写bugZilla上的bug号。之后通过单击本数字可直接跳转该bug页。
  6. 最后可以查看request导航栏的最右侧的Diff,查看diff文件是否正常显示,如果所有配置项没有问题了,点击Publish发布这个请求,你的评审人会收到指定邮件,你的评审人评审后你也会收到评审邮件,针对问题你可以进行修改,如果需要重新上传新的diff文件,请进入到该申请中,在request导航栏第二项Update处点击Update Diff来更新diff文件或者提交新的文件,比如截图之类的。
  7. 评审通过后,问题发起人应及时关闭问题,方式是在request导航栏第一项中点击close->submitted,手动关闭这个问题。
    三、使用rbtools自动发起请求(推荐)
  8. 安装python,安装结束后配置如下两个环境变量到系统path中,运行命令行命令“python”验证是否安装成功。(记得加分号)
C:\Python27C:\Python27\Scripts
  1. 运行命令行命令pip install rbtools,安装rbtools工具,成功后输入命令“rbt”验证是否安装成功。
  2. 安装diffutil,安装后添加如下环境变量到系统path中。
C:\Program Files (x86)\GnuWin32\bin
  1. 命令行输入rbt可以查看到rbt的所有命令,常用的几个如下:
    post 自动上传diff文件并创建review申请
    setup-repo 配置rbt工具的基本参数
    --publish(-p) 创建一个直接发布的申请(记得加上,否则作为draft草稿状态除了发起人,谁都看不到这个申请)
    --summary= 综述,类似于题目
    --description= 详细描述
    --target-groups= 指定为你review代码的组
    --target-people= 指定为你review代码的用户
    --username= 指定你的reviewboard用户名
    --password= 指定你的reviewboard密码
    --bugs-closed= 你所修改对应的bugzilla上的bug ID号“,如果已经配置好了rb系统和bugzilla的链接,执行此命令后的review request 会在右侧的bug一栏自动填上该ID号,页面中点击该ID号会自动跳转到bugzilla对应的bug页面。
    -r= 你想要更新的reviewID号,对指定编号的申请进行修改,默认是更新diff文件,也可以更改其他配置,这样不会产生新的申请,而会在你指定的申请中upload新的diff文件,在浏览diff文件的时候可以拖动滚动轴切换不同版本的diff文件。
    -o 上传后直接打开浏览器到该request
    -I= 对指定文件发起申请,“=”后填写路径,该路径是对于执行命令行的相对路径。如果要指定的是文件夹,那么可以使用-I=path/to/yours/*,即加通配符的方式自动包含指定路径下的所有更改文件,如果已经使用-I指定了一些目录后,还想包含当前命令行所在目录的文件,可以使用-I=
    -X=是指定类型文件,比如txt文件,则-X=/'*.txt
  2. 将.reviewboardrc文件复制到你所维护的代码的根目录,比如你维护的代码都在h5里面,就可以把这个文件放在h5文件夹下。打开该文件,修改第一个为reviewboard地址,第二个是svn代码库地址,后两个是你的用户名密码。
  3. 具体实例:
    6.1 修改文件后打开该目录的命令行工具,例如我想要直接发布这个申请,并且不想登陆到网站再写描述内容和指定人,我希望直接一句代码搞定这一系列操作,包括指定review人,实例rbt post -p --summary=“my test” --description=“just for test” --target-people=manager 对指定ID的申请进行更新diff文件。即我更新了代码,应提交新的diff文件到原申请上。提交后点击申请的diff,切换到diff界面,会在diff文件预览区之上显示版本比对切换按钮:
    rbt post -p -r=“之前的reviewID”(如果你需要更新的不是代码,而是review人或者summary或者description等信息,也可以使用这个命令更新申请).
    6.3 对指定文件进行发起申请(本例假设我在h5文件夹下执行命令行,要对h5文件夹下的a.json和app文件夹下的a.js发起申rbt post -p --summary=“my test” --description=“just for test” --target-people=manager -I=a.json -I=a.js
    提交成功的表现是返回一个提交成功的reviewID和两个自动生成的服务器端文件路径的地址。
  4. 打开reviewboard网站可查看自己提交的结果。
  5. 常见问题。
问题描述1:GNU diff is required in order to generate diffs. Make sure it is installed and in the path。

答:diffutil没有安装或者没有配置环境变量。

问题描述2'ascii' codec can't decode byte 0xc* in position *。

答:python解码语言是ascii,但是我们希望是utf-8。
解决方案,打开C:\Python27\Lib\site-packages,创建新文件,名为sitecustomize.py,把下面两行代码粘贴进去保存退出。

import sysreload(sys) sys.setdefaultencoding('utf-8')

之后打开cmd,执行命令“python”,启动python解释器,然后依次输入下面代码:

import syssys.getdefaultencoding()

如果输出是utf-8则ok,否则,直接在命令行把上面的3句命令执行下,然后再执行上一句的get,查看输出结果。

问题3:ERROR: The current directory does not contain a checkout from a supported source code repository.

rbt post时,常见的不成功的错误,reviewboardrc文件所在位置不在库内,或者该文件里面的库地址有误,请检验是否正确。

问题4CRITICAL: Could not parse specified revisions:

一般都是某个命令段内有空格且没有双引号造成的。请检查命令行,补全双引号或者修改命令格式。

问题5:

One or more files in your changeset has history scheduled with commit. Please try again with '--svn-show-copies-as-adds=y/n'.

四、关于强制review方式下的svn提交流程

当本功能激活的状态下,强制review的流程如下:
1. 更新代码后必须先发起review申请。
2. 申请通过后(至少有一个审核人ship it通过),才可以发起提交代码申请,并且在log message上第一行行首按照格式注明你所通过的reviewID,格式是review:ID号
3.脚本自动在reviewboard系统中搜索该ID,如果该ID通过审核则放行代码通过,否则则被拒绝。
关于这种提交方式你必须注意:一个reviewID只能使用一次,所以你必须保证审核时的文件就是你提交代码时的那些文件,一旦上传成功,该ID无法再次使用,如果发生遗漏这种情况,你只能重新发起申请。
如果提交过程中出错,比如提示没有reviewID,则代表log message没有填写reviewID或者格式错误,请使用正确的格式:“review:你的申请ID”。
五、review过程需要说明的几点
1. 配置reviewboardrc
配置时第一个不用修改,就是reviewboard系统的地址,第二个库地址是svn库的http访问方式的地址,第三项第四项的账户名就是reviewboard的账户名和密码。Reviewboard的post过程实际上是通过大家的这个系统账户自动登录到第一个路径对应的reviewboard系统,然后通过后台搜索和你第二项路径一样的已经配置好的svn库的账号密码来调取相关文件,经过系统自动对比生成diff文件,然后根据你在rbt过程中的各项参数标志来创建request。
本文件在文件夹中有,但是只写了四条信息,其余信息可以自行扩展,详情请参阅rbtools说明文档。
3. Rbt命令行
每个命令内部不要有空格,如果要有空格就是用双引号包起来,指定review人或者组时“=”后面不要有引号,直接写指定人账号名/姓/名即可,如果指定多人可以用双引号包起来。
4. Request步骤图示
A. 发布请求后,如果是手动的提交,请完善各项信息并publish。
B. Review人会收到邮件通知,请及时点击链接进行review。您可以通过request的导航栏的最后一项Diff来查看diff文件,并点击Diff文件的左侧代码行来添加comment。添加后点击顶部的绿色提示栏的Publish来发布。
C. request发起人会收到comment提示,登陆该request后,可以看到该comment,并可参看Diff文件或者直接Reply该comment,reply过程中除了可以写文字之外,可以选择Fixed还是Drop,前者表示Reply的时候我已经修复了该问题。
D. 上一点需要注意的是,如果diff文件更新了,需要上传的记得更新diff文件或者添加新文件。(此处支持通过Add File 上传图片的!)
E. reply后,review人会收到邮件提醒,这时候进入该request,可以继续进行comment,如果没有问题了,就可以把这个request通过,在rb系统中,通过是用ship it!来表示,review人可以点击request导航栏上的Ship it!来通过这个申请。
F. 通过之后,发起人收到邮件通知后应直接将该问题关闭,即更改close状态为submitted。
5. 界面订制
在request列表中,用户随时可以通过右侧的铅笔图标 来订制显示的类别,常用的有requestID、summary、submitter、lastUpdated等等。每一个request对应唯一的一个ID,所以我们可以通过其ID来搜索到该问题。
6. request状态解释
Draft:草稿,没有publish的申请,不作为正式申请对待,请完成步骤必须publish,否则除了你自己谁也看不到这个request。
Pending Review:已经发布的申请,正在等待审核。(ship it但未submitted的申请也包括在内)
Submitted:已解决的申请,是完整申请的最后的状态。
Discarded:丢弃,不继续走review流程。
Muted:静音,没有丢弃,但是不给相关人更新任何状态,类似休眠。
Archive: 存档,如果不想看见的申请,在submitted或者discarded后者muted之后,选中该申请的checkBox后,点击Archive,就可以将其存档。在dashboard中选择hide Archived就可以隐藏该申请。
7. 代码评审前不要提交新做的功能源程序,因为差异文件是基于配置库svn中版本来产生的,提交后再生成差异文件,也就没有差异了。除非重新改个文件名,当成一个新文件来产生差异。
8. 任何不是request指定review人的请不要在该request相关人不知情的情况下私自ship it来通过评审。

五,强制review的配置方法

当初部署强制review的时候,搜了很多的文档,后来找到了这位python大神的文章,基本按照他写的方法进行的配置,对该方法重复的部分就不赘述了。

赖勇浩的博客链接地址

原创粉丝点击