ReviewBoard安装和配置札记

 2023-09-15 阅读 15 评论 0

摘要:眼下部门还没有採用Pair Programming那种时时刻刻都在review代码的工作方式,代码Review多採用走查方式,即代码写完后召开一个Code Review的Meeting,集中时间和经验丰富的人力对重点代码进行筛查,这样的方式的代码Review有利,但也有弊。其

眼下部门还没有採用Pair Programming那种时时刻刻都在review代码的工作方式,代码Review多採用走查方式,即代码写完后召开一个Code Review的Meeting,集中时间和经验丰富的人力对重点代码进行筛查,这样的方式的代码Review有利,但也有弊。其弊端在于低效和覆盖面小。做一次走查须要N多人參与若干个小时,而在这段时间里不是每一个參与者都能极其高效的參与到走查中的,实践证明仅仅有少数几个人能真正在一次代码走查会议上起到关键的作用。另外走查一次能覆盖的代码范围又较小,一些看似不重要却非常可能带来BUG的代码在走查会上非常容易被遗漏。

Code Review工具对代码走查是一种非常好的补充。眼下比較流行的开源Code Review工具有Review BoardCodeStriker等。对于ReviewBoard,我关注已久。在其还在rc阶段我就以前尝试安装过,只是不管是在Windows和Unix下都以失败告终。开源工具的安装的确有些让人头痛,一堆互相依赖的软件包,版本号稍有差异就非常可能导致安装执行失败。并且失败的原因还非常难得知。

ReviewBoard今年最终Release了,眼下最新版是1.0.3,其官方推荐在Linux和Windows上安装。我选择了Ubuntu 9.04Ubuntu的包管理工具apt最大的优点就是能自己主动帮你分析开源包的依赖关系并自己主动下载安装依赖包。恰巧在CSDN的一个博客上发现一篇'ReviewBoard on Ubuntu 9.04 Server'的安装步骤,我就依照文章中的步骤超级顺利的完毕了ReviewBoard的安装,这里我也将其步骤贴出来,并做一些简单凝视(有些地方略有不同):

我是在Ubuntu 9.04 Desktop上安装的,这个版本号默认自带GccPython等软件包。我们仅仅需安装其它工具:(假设你是通过公司代理上外网,别忘了在你的Shell配置文件里设置http_proxy环境变量,格式是:export http_proxy=http://user:passwd@url:port)
1、安装easy_install
sudo apt-get install python-setuptools python-dev;

2、安装apache2和mod_python
sudo apt-get install apache2 libapache2-mod-python
sudo a2enmod python /* 改动apache2的配置,让python mod处于enable状态 */

3、安装mysql
sudo apt-get install mysql-server python-mysqldb libmemcache-dev
sudo easy_install http://gijsbert.org/downloads/cmemcache/cmemcache-0.95.tar.bz2

创建数据库、数据库用户for ReviewBoard(这块要注意数据库的字符集设置,默认是UTF-8,假设你要用其它中文字符编码标准,这里就须要显式指定,查查mysql的Manual吧)
mysql -u root -p  /* 用root用户登录 */
mysql> create database reviewboard;
Query OK, 1 row affected (0.00 sec)
mysql> create user 'reviewboard'@'localhost' identified by 'reviewboard';  /* 前一个reviewboard是訪问数据库的username,后一个reviewboard是密码 */
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on reviewboard.* to 'reviewboard'@'localhost';  /* 前一个reviewboard是数据库的名字,而后一个reviewboard则是訪问数据库的username */
Query OK, 0 rows affected (0.00 sec)
mysql> exit

4、安装subversion (眼下大多数公司都用subversion)
sudo apt-get install patch subversion python-svn

5、安装reviewboard
sudo easy_install reviewboard

6、创建你的reviewboard网站
sudo rb-site install /var/www/reviewboard   /* 之后会有一系列相似安装向导的步骤,须要你做出选择,尽量选择默认值吧 */
    · Domain = localhost
    · Root Path = /
    · Media URL = media/
    · Database Type = mysql
    · Database Name = reviewboard
    · Database server = localhost
    · Database username = 'reviewboard'
    · Database password = 'reviewboard'
    · Cache Type = memcache
    · Memcache Server = memcached://localhost:11211/
    · Webserver = apache
    · Python loader = modpython

7、配置网站,启动Apache2
sudo chown -R www-data /var/www/reviewboard/htdocs/media/uploaded /* 让webserver拥有对uploaded文件夹的改动权限 */
sudo cp /var/www/reviewboard/conf/apache-modpython.conf /etc/apache2/sites-available/reviewboard
sudo a2dissite default
sudo a2ensite reviewboard
sudo /etc/init.d/apache2 restart

在你的浏览器里敲入:http://localhost:80,ReviewBoard的登录界面就会出如今你的面前。

顺利安装完ReviewBoard后,你能够到官网去看Manual,学习怎样使用ReviewBoard。简单说ReviewBoard支持两种Review Code的模式,一种是在code没有commit之前提交diff/patch文件进行review,叫做pre-commit review,第二种则是在code commit之后,由工具自己主动依据提交的版本号号生成diff/patch文件,并形成一条新的Review Request,这样的模式也叫post-commit review。

先说pre-commit review模式。生成pre-commit review request有两种方法,第一种就是通过页面手工提交patch/diff文件的方法:首先通过界面设置好你的svn repository,比方:svn://10.1.1.23:3344;然后在你的DashBoard中“New Review Request",有三个字段须要你填写:
Repository:  /* 选择你刚才配置的repository的id */   
Base Diff Path: /* 假设你checkout出来的proj的svn url是svn://10.1.1.23:3344/trunk/testproj,那么这个字段填的就是/trunk/testproj */
Diff: /* 你生成的diff文件的路径,在Windows上我用TortoiseSVN的creatpatch工具直接生成某个源文件的diff格式文件 */

填好后,提交,这时你就会看到一个处于draft状态的Request,继续编辑它,指定Reviewer,然后Publish这个Request,这样你指定的Reviewer就能看到这个Request了。这块假设你设置了Email通知,Publish过程会有一定延迟,特别是假设你的Email设置出错了,那Publish将一直处于ing状态,你刷新一下页面后,实际上你的Request已经publish结束了。

第二种提交pre-commit review request的方法是通过一个名为'Post-Review'的python脚本实现的。这个脚本在RBTools工具包中,在使用之前先运行:'sudo easy_install -U RBTools'安装这一脚本。

Post-Review须要知道两类信息,一个是ReviewBoard Server的信息, 一个是你的svn repository的信息,第一种信息我们能够通过编辑~/.reviewboardrc,加入一行REVIEWBOARD_URL="http://localhost:80"。至于svn repository的信息,post-review脚本可自己主动从你本地checkout出的代码working copy中携带的repository信息中获得,前提你要进入到该working copy所在的文件夹下去运行post-review。比方:你将svn://10.1.1.23:3344/trunk/testproj checkout到~/proj/testproj以下,那么你就应该先cd ~/proj/testproj后再运行post-review,post-review工具在默认情况下会将当前本地代码uncommitted的changes形成一个review request并提交到reviewboard server。你也能够在post-review后面加上文件名称字来指定将特定的文件的changes而不是当前项目文件夹下全部的uncommitted changes。

reviewboard、以下是我配置和运行Post-review出现的一些问题和解决方法:

首次在testproj下运行'sudo post-review',出现例如以下打印日志:

Traceback (most recent call last):
  File "/usr/local/bin/post-review", line 5, in <module>
    pkg_resources.run_script('RBTools==0.2beta1', 'post-review')
  File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 448, in run_script
    self.require(requires)[0].run_script(script_name, ns)
  File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 1166, in run_script
    execfile(script_filename, namespace, namespace)
  File "/usr/local/lib/python2.6/dist-packages/RBTools-0.2beta1-py2.6.egg/EGG-INFO/scripts/post-review", line 2314, in <module>
    main(sys.argv[1:])
  File "/usr/local/lib/python2.6/dist-packages/RBTools-0.2beta1-py2.6.egg/EGG-INFO/scripts/post-review", line 2292, in main
    server.login()
  File "/usr/local/lib/python2.6/dist-packages/RBTools-0.2beta1-py2.6.egg/EGG-INFO/scripts/post-review", line 308, in login
    'password': password,
  File "/usr/local/lib/python2.6/dist-packages/RBTools-0.2beta1-py2.6.egg/EGG-INFO/scripts/post-review", line 570, in api_post
    return self.process_json(self.http_post(path, fields, files))
  File "/usr/local/lib/python2.6/dist-packages/RBTools-0.2beta1-py2.6.egg/EGG-INFO/scripts/post-review", line 481, in process_json
    rsp = simplejson.loads(data)
  File "/usr/local/lib/python2.6/dist-packages/simplejson-2.0.9-py2.6-linux-i686.egg/simplejson/__init__.py", line 307, in loads
    return _default_decoder.decode(s)
  File "/usr/local/lib/python2.6/dist-packages/simplejson-2.0.9-py2.6-linux-i686.egg/simplejson/decoder.py", line 335, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/local/lib/python2.6/dist-packages/simplejson-2.0.9-py2.6-linux-i686.egg/simplejson/decoder.py", line 353, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded

这样的错误信息弄得我一头雾水,在Google上找了半天,也没有什么好的办法。在ReviewBoard的issue archive里有人遇到了和我一样的问题,而ReviewBoard的维护人员建议:改动/usr/local/lib/python2.6/dist-packages/RBTools-0.2beta1-py2.6.egg/EGG-INFO/scripts/post-review中的代码(在/usr/local/lib/python2.6/dist-packages下你可能会发现RBTools-0.2beta1-py2.6.egg是个文件而不是文件夹,不要紧,.egg文件就是一个zip文件,可将其用unzip命令解压后再放到一个名为RBTools-0.2beta1-py2.6.egg的文件夹中就可以,解压后原始RBTools-0.2beta1-py2.6.egg做好更名和备份),在process_json method開始处加上一行代码:debug(data)。然后在运行post-review时加上--debug选项,观察http post的response数据。

依照网上的建议做了改动:运行sudo post-review --debug,果然有效果,能看到http post后返回的应答内容,竟然是公司代理serverwebsense的拦截应答。

哇,原来如此,我的.bashrc配置了http_proxy,似乎post-review是向代理发出的http post请求,结果被代理拦截掉了。凝视掉.bashrc中的http_proxy变量后,再反复运行post-review命令,这下一切ok了,一个New Review Request成功生成。

reviewing editor。另外一种模式post-committed review相同是通过post-review工具完毕的。命令格式:post-review --revision-range=STARTREV[:STOPREV]。脚本会自己主动diff两个revision之间的区别并形成review request提交到reviewboard server的。

关于post-review的很多其它使用方法,这里不细说了,可阅读官方的Manual。ReviewBoard功能还是非常强大的,Review时你能够针对每行代码写Comments,这样的Review Code的方式给你足够时间去思考,仅仅要你认真对待,就不会出现盲区、死角,所以新提交的代码就都能被Review到。

 

 

 

 

怎么看电脑的配置?注:安装reviewboard时,遇到一个问题, 使用easy_install不能下载ftp://ftp.tummy.com/pub/python-memcached/old-releases/python-memcached-1.45.tar.gz。 可是能通过浏览器或者curl下载该压缩包。

解决方法:

先通过curl下载该包。在使用easy_install -f . python-memcached-1.45.tar.gz 进行离线安装。

然后再运行reviewboard的easy_install.

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/5/55952.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息