[Perl] 关于 Bugzilla 的一些问题与研究

最近碰到一个关系到 Bugzilla 升级与二次开发的项目,对这个大名鼎鼎的缺陷管理系统有了进一步的研究,主要研究内容包括:在不同系统(windows/Linux)上的安装与配置;不同 Bugzilla 系统间的数据结构对比以及升级可行性分析(2.2.x vs 3.4.1);Bugzilla 组操作与权限管理;细粒度的 Bug 状态操作与权限限制。在后两项的调查和实践过程中遇到了一些问题,特此记下,以供日后查证、参考。

以下是相关环境信息:
System〉 包括 Windows 和 Linux
Release〉 我们使用的是目前官方的最新稳定版 Bugzilla 3.4.1
Database〉 数据库是 MySQL 5.1 以及 Oracle 10.2

这里顺便提一下前两项的调查结果,对于 Bugzilla 在不同的操作系统上的安装过程来说,实际上没有什么不一样的,同样的如下步骤:
1〉 安装 Perl (version > 5.8.1) 以及相关模块 (使用 ./checksetup.pl 进行检测安装结果)
2〉 配置 localconfig 文件中的 DB 配置 (MySQL, Oracle, PgSQL)
3〉 安装 WebServer (推荐 Apache) 配置运行方式 (CGI/Module)
4〉 运行 Bugzilla 进行进一步的系统配置
其中需要要注意的几个问题:
1〉 Perl 的环境在 Windows 以及 Linux 下有所不同,在安装过程中如果遇到模块安装成功,但是 Bugzilla 不认的情况,请先检查 Perl 默认库的载入顺序(最好保证 sites/lib 下面的库优先),然后用 ppm 检查版本是否正确。如果实在不行也可以通过暂时注释掉 checksetup.pl 中 Live Code 段的一些检查代码,强制进行下一步操作。
2〉 在 windows 下运行 CGI 需要在注册表中加入以下键值(可以保存成 .reg 文件然后导入):
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT/.cgi]
[HKEY_CLASSES_ROOT/.cgi/Shell]
[HKEY_CLASSES_ROOT/.cgi/Shell/ExecCGI]
[HKEY_CLASSES_ROOT/.cgi/Shell/ExecCGI/Command]
@="c://Perl//bin//perl.exe -t"

关于第二点我们对比、分析了 2.2.x 和 3.4.1 版本的 Bugzilla 数据库,结果如下:
1〉 数据表数量从 51 增加到 62 张,其中没变的、修改的以及新增的表的数量分别是35、16和11
2〉 修改的字段主要是被用于 Bugzilla 新版本中的一些新功能(例如:Keywords / Customer Fields / Legal Values / Bug Status Flow)
3〉 核心表和字段修改比较少,对于一般类型的二次开发影响不会很大

然后就是后面两点,我们在研究这两点问题上遇到了一些问题。其一,就是要完全搞懂 Bugzilla 这一套的权限管理系统的架构,具体来说就是怎么实现一些特定 case 的配置。目前关于这个方面得到的结果如下:
1〉 一般来说组配置的步骤如下:添加/配置组(Administration/Groups)-〉产品(Bug)权限控制(Administration /Products/Edit Group Access Controls),关于产品(Bug)权限控制的相关信息和案例请参考手册:http://www.bugzilla.org/docs/tip/en/html/products.html#product-group-controls
2〉 在配置产品(Bug)权限的时候,要注意 Entry 和 Canedit 这两个选项是特殊排他的,也就是“与”的组合关系;后面的 canconfirm 等都是“或”关系的组合;另外,要注意 MemberControl 和 OtherControl 两个选项,他们主要是在选择该 BUG 是否有对应的组“可见性”的选项:MemberControl 是表示当前用户属于该组时候会出现的选项,其中 Shown 表示仅出现组选框,Default 表示出现并默认选中,NA 表示没有关系,最后就是强制性选项(一般以 Default/NA 和 Shown/Shown 这种非强制性选项居多)把更多的选择性留给用户,提供更强的可定制性
3〉 其他组权限相关的配置的位置有:Administration/Parameters/Group Security 以及 Perferences/Permissions (可以查看当前用户的权限)

最后一点也是最麻烦的一点,目前我们通过 Bugzilla 自身的组权限设置还是只能实现有限的比较“粗粒度”的权限管理,如果要涉及到更“细粒度”的权限管理就会比较麻烦,用官方的语言来表达,就是 “Companies often have rules about which employees, or classes of employees, are allowed to change certain things in the bug system. For example, only the bug's designated QA Contact may be allowed to VERIFY the bug. Bugzilla has been designed to make it easy for you to write your own custom rules to define who is allowed to make what sorts of value transition. ” 简要的来说就是如果遇到类似 “只有指定的 QA 人员才能修改对应的 Bug” 此类的需求的时候,我们就要通过自己写代码来解决问题了。不过幸运的是 Bugzilla 考虑到了这一点,设计者在 Bug.pm 中留下了一个名为 check_can_change_field() 的接口方法,我们可以通过添加/修改这个方法的逻辑代码来实现具体的需求。具体可以参考官方说明:http://www.bugzilla.org/docs/tip/en/html/cust-change-permissions.html 。

关于这个项目的具体场景,由于安全问题,这里不能指出,望大家见谅;在项目完成后我会想办法构造一个类似的情景来进一步解说一下这个问题/实例,本文有待扩充~ To be Continued ...


原文链接: http://blog.csdn.net/shagoo/article/details/4438467

你可能感兴趣的:([Perl] 关于 Bugzilla 的一些问题与研究)