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

不二家 · August 16, 2017 · 2844 hits

背景

开发根据 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 的状态即可。

欢迎加入我们

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

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
No Reply at the moment.
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up