Azure DevOps Server:使用服务挂钩Web Hooks集成钉钉
Contents
- 1. 场景描述
- 2. 实现方案
- 2.1 钉钉聊天群机器人
- 2.2 企业微信和钉钉的区别
- 2.3 DevOps 服务挂钩Web Hooks
1. 场景描述
在之前的博客《Azure DevOps Server:使用服务挂钩web hooks集成企业微信》中,我介绍了如何在Azure DevOps Server中集成企业微信群的机器人,实现自动发送各类事件(例如)产生的信息,以便用户可以通过手机、电脑等终端在即时消息软件中获得团队开发中的消息。
与企业微信类似,钉钉也有对应的聊天群机器人功能,本文就介绍如何集成Azure DevOps Server和钉钉,实现开发消息的实时推送。
2. 实现方案
2.1 钉钉聊天群机器人
与企业微信非常类似,钉钉也给聊天群配置了一个叫机器人的功能。这个机器人用于集成第三方系统,是自动发送消息到钉钉聊天群的方法。所谓机器人,实际上也是钉钉的一个开放接口,可以接受外部系统发送过来的消息,并将接受到的消息展现在钉钉聊天群中。我们可以通过下面的方式创建钉钉聊天群机器人:
当参考上面的方式新建了一个钉钉聊天群机器人后,我们可以看到这个机器人对应的api和专有的key(注意要对key保密,否则别人就能利用这个可以冒充你发送消息),并且可以做一些发送消息的测试:
例如,我们将上面的接口和参数配置到postman中,就可以将信息发送到钉钉聊天群中,如下图:
钉钉可以发送多种类型的消息,例如:
- 文字消息
{ "text": { "content":"Azure DevOps Server(简称ADO Server,原名TFS)是微软公司Azure DevOps产品在企业内网部署运行的研发管理平台产品;
作为研发运维一体化的实施方案和应用软件生命周期管理(ALM:Application Lifecycle Management)的基础平台,
ADO Server为信息技术团队提供软件研发过程管理、文档和源代码管理、持续集成和自动部署、质量控制和测试等全过程的功能模块。devops" }, "msgtype":"text" }
- 发送消息同事 At @用户
{ "at": { "atMobiles":[ "13520118286" ], "atUserIds":[ "user123" ], "isAtAll": true }, "text": { "content":"[send to all]: Azure DevOps Server(简称ADO Server,原名TFS)是微软公司Azure DevOps产品在企业内网部署运行的研发管理平台产品;
作为研发运维一体化的实施方案和应用软件生命周期管理(ALM:Application Lifecycle Management)
的基础平台,ADO Server为信息技术团队提供软件研发过程管理、文档和源代码管理、持续集成和自动部署、质量控制和测试等全过程的功能模块。devops," }, "msgtype":"text" }
- 发送卡片消息(1)
{ "actionCard": { "title": "devops blogs: 用于分享Azue DevOps Server的博客站点", "text": "![screenshot](https://tse3-mm.cn.bing.net/th/id/OIP-C.Gb205a5oYLBurX1k1JS0SAHaEo?pid=ImgDet&rs=1)", "btnOrientation": "0", "singleTitle" : "阅读全文", "singleURL" : "http://www.cnblogs.com/danzhang" }, "msgtype": "actionCard" }
- 发送卡片消息(2)
{ "msgtype": "actionCard", "actionCard": { "title": "Azure DevOps Server(简称ADO Server", "text": "![screenshot](https://tse3-mm.cn.bing.net/th/id/OIP-C.Gb205a5oYLBurX1k1JS0SAHaEo?pid=ImgDet&rs=1) \n\n
Azure DevOps Server(简称ADO Server,原名TFS)是微软公司Azure DevOps产品在企业内网部署运行的研发管理平台产品;
作为研发运维一体化的实施方案和应用软件生命周期管理(ALM:Application Lifecycle Management)的基础平台,
ADO Server为信息技术团队提供软件研发过程管理、文档和源代码管理、持续集成和自动部署、质量控制和测试等全过程的功能模块。devops", "btnOrientation": "0", "btns": [ { "title": "内容不错", "actionURL": "http://www.cnblogs.com/danzhang" }, { "title": "不感兴趣", "actionURL": "http://www.cnblogs.com/danzhang" } ] } }
使用postman发送成功后,我们可以看到下图中类似的消息截图:
2.2 企业微信和钉钉的区别
在使用过程中,我们发现配置机器人时,钉钉有安全设置项,要求符合某种条件才能接受信息;例如需要在自定义关键字规则,要求消息中必须包含了我们自己定义的关键字,不符合规则的web请求会被钉钉抛弃。
2.3 DevOps 服务挂钩Web Hooks
Azure DevOps Server 有非常完善而且强大的服务器挂钩功能,可以在多种事件(工作项变更、代码提交、流水线运行等)Events发生时,将对应的数据通过服务挂钩的方式发,自动送到第三方系统(如下图)。
在Azure DevOps Server的服务挂钩设计中,原生支持多种应用程序,例如Microsoft Teams,Jenkins,HiChat, Slack等;但是非常遗憾,目前它还不支持我们常用的企业微信、钉钉等国产软件。
由于服务挂钩推送的json数据结构与钉钉群机器人的结构不一致,我们不能直接将钉钉群机器人的接口Url直接配置在服务挂钩中,需要我们自定义一个接口程序,用于将服务挂钩发出的json数据转换为钉钉群机器人支持的输入结构。例如我们在使用过程中,自己使用C#编写了一个接口(http://my-api-server/api/DingTalkRobot?url=https://oapi.dingtalk.com/robot/send?access_token={dingtalk-token} ;我们将这个接口配置在DevOps Server的服务挂钩中。如果你在使用专门用于web hooks调试和转换的云服务 https://webhook.site/ ,直接使用它的数据转换功能,无需自己开发接口。
完成上面的开放和配置后,我们在企业微信群中,就能收到来自Azure DevOps Server的自动通知。
如果需要,你还可以从微软Azure DevOps Server 的在线文档,查询更多的权威资料,也欢迎通过下面的联系方式与我沟通,相互学习,相互提高!
https://www.cnblogs.com/danzhang
Azure DevOps MVP 张洪君