【问题标题】:How can I update Bugzilla bugs from bash and php scripts?如何从 bash 和 php 脚本更新 Bugzilla 错误?
【发布时间】:2010-09-25 07:46:50
【问题描述】:
我们的开发过程通过大量 bash 和 php 脚本(包括 subversion 挂钩脚本)实现了高度自动化。这些脚本做了很多事情来与我们的 Bugzilla 3.0 安装集成。
但当前的集成方法是直接更新 bugzilla 数据库的一堆 SQL 调用 - 这显然有许多缺点 - 包括让我担心升级到 3.2,以防数据库架构发生变化!
例如,要为错误添加注释,我正在对 longdescs 表执行 INSERT。
所以我的(有点啰嗦)的问题是:
- 我是否应该使用 Bugzilla WebServices(如果是,除了 Bugzilla API 文档之外,是否还有其他没有让我快速上手的好的文档)
- 或者,我是否应该使用其他一些 Bugzilla API(直接 perl 调用?) - 再说一遍,这方面有没有像样的文档?
- 或者,我是否应该继续做我正在做的事情(直接 SQL 调用),因为 db 并没有发生太大变化并且它“完成了工作”
【问题讨论】:
标签:
php
web-services
bash
integration
bugzilla
【解决方案1】:
根据 Bugzilla WebServices API,一些所需的功能(例如更改错误状态)尚不可用,因此目前直接 SQL 调用似乎是最合适的选择。
数据库架构在 3.0 和 3.2 版本之间没有显着变化,因此这是一种实用的前进方式。
【解决方案2】:
仅供参考,在 Bugzilla 3.2 发行版中,有一个 contrib/bz_webservice_demo.pl 文件,其意图是“展示如何通过 XMLRPC 与 Bugzilla 对话”。
【解决方案3】:
小心!一些数据库更改也意味着其他更改。通过向 longdescs 添加一行来为错误添加注释是可行的,但您还应该更新表错误中的 delta_ts。
在 Web 服务可用之前,我会这样做:使用您想从 shell 执行的 UI 执行操作。 (假设是 MySQL)使用 'mysqlbinlog' 查看数据库的二进制日志,您会看到 Bugzilla 在执行任何操作时通常会执行哪些语句。
如果您希望您添加的评论在下次有人进行更改时被邮寄,请不要理会 bugs.last_diffed。如果您不希望您添加的评论被邮寄出去,请像对 bugs.delta_ts 所做的那样更新 bugs.last_diffed。
Bugzilla 在数据库中有许多微妙的依赖关系,您必须尊重这些依赖关系,否则您可能会得到一些意想不到的结果。