持续集成 gerrit 提交触发 redmine 和 bugzilla 对应 id 状态更改

不二家 · 2017年08月16日 · 2587 次阅读

背景

开发根据 Bugzilla 和 Redmine 中的 bug 和 issue,会做相应的需求开发,在开发完毕以后,会根据 bug id 或者 issue id 提交 git commit message。

例如

fix |#0000>修复bug
feat|#00001>新增需求

我们的开发代码在提交以后,之前是需要手动打开 Bugzilla 或者 Redmine,然后手动修改对应的状态,希望可以实现代码提交以后自动更改对应 id 状态。

那么这个需求怎么实现呢?

是需要打通 Gerrit Redmine and Bugzilla 的连接,思路是通过中介 Jenkins 实现


先找到到 Redmine 和 Bugzilla 的 REST API

Redmine: http://www.redmine.org/projects/redmine/wiki/Rest_api

Bugzilla: https://bugzilla.readthedocs.io/en/latest/

然后实现离线更改 Redmine 和 Bugzilla 状态


1、Redmine 的实现,可以借助 python-redmine 的库

def _redmine(url, key, issueId):
    redmine = Redmine(url, key=key, requests={'verify': False})

    # issue status_id分为6种,1:new,2: In Progress,3:Resloved,
    # 4:Feedback,5: Closed
    redmine.issue.update(issueId, status_id=3)

只要传入对应配置的 Redmine 的 url,自己个人的 token,自己的 user token 可以在登录之后,在我的账号下查看。

我的账号下,有一个 API 访问键,然后点击显示

这里的 issue id 是在 Redmine 新建 issue 以后,固有 id。

2、Bugzilla 的实现,直接通过 requests 库实现。

最初的设想也是通过,python-bugzilla 的库实现,但是很奇怪,一直我们的 url 和 token 一直调不通,后来直接参考 https://bugzilla.readthedocs.io/en/latest/, 里面关于 update bug 的描述,直接用 requests 实现,也很简单。

def _bugzilla(url, key, bugId):
    headers = {'Content-Type': 'application/json'}
        bug_update = {
            'ids': [bugId],
            'status': 'RESOLVED',
            'resolution': 'FIXED'
        }

       url = '{url}/bug/{id}?api_key={key}'.format(url=url, id=bugId,
       key=key)
       response = requests.put(url, headers=headers,
            data=json.dumps(bug_update), verify=False)
       assert response.status_code == 200

这里的 url 和 key,同样是在部署之后的本地获取,key 值是在登录之后,在账号下的 API 值里面生成获取。

这里的 bugId 就是对应的是 bug 的 id。

小贴士,这里的 status 如果需要改成 Resovled 和 Closed 需要增加一个 resolution 字段。

此时,我们已经实现了离线触发更改 Redmine 和 Bugzilla 状态,那么下面的用 Jenkins 中介已经很容易实现了。

Jenkins 内的配置

只需要在 Jenkins 内配置 Gerrit 事件触发,是选择Change Merged,然后加上需要监控的项目就行。

小贴士:如果我们不想我们的 job 发生的成功或者错误对当前的代码提交有任何影响,可以勾上 Slient Mode。

集成配置

最后只需要将 git commit message 内的 id 字符取出,判断是 Redmine 或者是 Bugzilla,然后更改对应 id 的状态即可。

欢迎加入我们

写在最后,我们的日常工作就是这些小而有意思的内容,如果想加入我们,可以看这封华米招聘

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册