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 钉钉聊天群机器人

与企业微信非常类似,钉钉也给聊天群配置了一个叫机器人的功能。这个机器人用于集成第三方系统,是自动发送消息到钉钉聊天群的方法。所谓机器人,实际上也是钉钉的一个开放接口,可以接受外部系统发送过来的消息,并将接受到的消息展现在钉钉聊天群中。我们可以通过下面的方式创建钉钉聊天群机器人:
1649085006(1)
1649085006(2)

1649085006(3)

当参考上面的方式新建了一个钉钉聊天群机器人后,我们可以看到这个机器人对应的api和专有的key(注意要对key保密,否则别人就能利用这个可以冒充你发送消息),并且可以做一些发送消息的测试:

例如,我们将上面的接口和参数配置到postman中,就可以将信息发送到钉钉聊天群中,如下图:
image
钉钉可以发送多种类型的消息,例如:

  • 文字消息
{
    "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发送成功后,我们可以看到下图中类似的消息截图:
1649085006(4)

2.2 企业微信和钉钉的区别

在使用过程中,我们发现配置机器人时,钉钉有安全设置项,要求符合某种条件才能接受信息;例如需要在自定义关键字规则,要求消息中必须包含了我们自己定义的关键字,不符合规则的web请求会被钉钉抛弃。

2.3 DevOps 服务挂钩Web Hooks

Azure DevOps Server 有非常完善而且强大的服务器挂钩功能,可以在多种事件(工作项变更、代码提交、流水线运行等)Events发生时,将对应的数据通过服务挂钩的方式发,自动送到第三方系统(如下图)。
image


在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 张洪君
在这里插入图片描述

posted on 2022-04-05 00:05  danzhang  阅读(196)  评论(0编辑  收藏  举报

导航