buildbot reporter对接钉钉机器人

微信扫一扫,分享到朋友圈

buildbot reporter对接钉钉机器人

最近利用空闲的服务器搭建了一个buildbot集群,需要在上面实现自动构建和自动测试,两者均涉及消息的推送。

buildbot可以通过email、http、IRC等方式进行消息的推送,但由于部署环境特殊以及出于安全方面的考虑,比较适合的方式是通过钉钉机器人推送构建信息。

关于buildbot的安装和部署,参见 持续集成框架buildbot初探
。钉钉机器人消息推送的详细设置参见 文档

具体推送消息的方式就是给如下链接发送一个HTTP POST请求,替换掉具体的 access_token
即可。

https://oapi.dingtalk.com/robot/send?access_token=XXXXXX

本文所关注的是Markdown消息类型,因此HTTP Body如下:

{
"msgtype": "markdown",
"markdown": {
"title": "消息标题",
"text": "消息内容"
}
}

这里选取的具体reporter就是 HttpStatusPush
,主要的配置如下:

DINGTALK_URL = "https://oapi.dingtalk.com/robot/send?access_token="
dingtalk_reporter = reporters.HttpStatusPush(
serverUrl=DINGTALK_URL + DING_PUSH_TOKEN,
format_fn=formatter,
builders=builderLst
)

其中 builderLst
是一个filter,用于从指定的builder中接收 build
对象, formatter
用于生成HTTP Body,它的输入是 build
对象,可以参考如下实现:

def body_format(b):
if b['complete'] is False:
return None
lines = [
'### CI Result\n',
'+ Builder: ' + b['builder']['name'],
'+ Result: ' + b['state_string'],
'+ Project: ' + b['buildset']['sourcestamps'][0]['project'],
'+ Branch: ' + b['buildset']['sourcestamps'][0]['branch'],
'+ Repository: ' + b['buildset']['sourcestamps'][0]['repository'],
'+ [Detail Page](' + b['url'] + ')',
]
body = {
"msgtype": "markdown",
"markdown": {
"title": "CI Report",
"text": '\n'.join(lines)
},
}
return body

HttpStatusPush
会在两个阶段进行消息推送,分别是 开始构建
结束构建
两个阶段:

  • 开始构建
    阶段: build
    complete
    字段的值为False,我们不需要关注这个阶段的信息,因此直接返回None即可,并不会进行消息推送
  • 结束构建
    阶段:我们关心的值是 builder
    名称、构建结果、Project名称、分支名称、仓库信息以及具体的页面链接

注意,同一个builder可能同时收到多个source change,因此 sourcestamps
可能存在多个元素,而本文的构建环境中,会避免这种情况,因此输出第1个元素的信息即可。

report是作为service的形式注册到buildbot中的,完成如下配置后,直接reconfig master就可让reporter生效了。

c['services'].append(dingtalk_reported)

Try it yourself!

微信扫一扫,分享到朋友圈

buildbot reporter对接钉钉机器人

ROG幻14-ACRNM限定版图览 充满机能风的气柱袋

上一篇

Docker常用命令总结

下一篇

你也可能喜欢

buildbot reporter对接钉钉机器人

长按储存图像,分享给朋友