zoukankan      html  css  js  c++  java
  • TFS发布计划发送到钉钉消息群

       由于工作中需要用到钉钉,每天都要和钉钉打交道:上下班打卡、出差请假流程、各种工作讨论组,不一而足,工作已然和钉钉绑在了一起,难怪有广告词: 微信是一个生活方式,钉钉是一个工作方式。

       我们是钉钉机器人内测版的首批用户,使用自定义机器人功能做了预警消息推送,效果还不错,目前钉钉机器人已经正式发布,支持与Github、Gitlab、Jira等集成:

        由于我们研发过程管理重度依赖微软TFS(Team Foundation Server),研发、测试及运维同学(DevOps)希望将发布计划通知到钉钉群,由于钉钉机器人没有提供默认支持,我们可以通过“自定义”机器人完成该功能。

    一、TFS中设置

    1.新建服务挂钩

    2.Web挂钩

    3.触发器

    4.设置URL及选择“全部”资源信息

      这里的URL,就是我们开发的WebAPI,点击测试,TFS会发送JSON给定义的WebAPI,格式如下:

     

    二、WebAPI

       我们主要对TFS发过来的JSON中的resource进行解析:

     public class WorkItemCreatedController : ApiController
        {
            //钉钉通知群
            private static string dingDingToken = ConfigurationManager.AppSettings["WorkItemCreatedDingDingToken"];
    
            [HttpPost]
            public void Post()
            {
                var wiJson = Request.Content.ReadAsStringAsync().Result;
                var workItem = JsonConvert.DeserializeObject<WorkItem>(wiJson);
             。。。。。。
             }
    }

       WorkItem定义如下:

        public class WorkItem
        {
            public WorkItemResource resource { get; set; }
        }
    
        public class WorkItemResource
        {
            public int id { get; set; }
    
            public Dictionary<string, string> fields { get; set; }
        }
    

      这里关键点是把fields定义为Dictionary,通过JsonConvert序列化后,很方便获得想要的字段,比较有用的几个字段是:

    "id": 发布计划创建成功后返回的id号,
    
    "System.WorkItemType": "发布计划",
    "System.CreatedBy": "创建人",
    "System.Title": "发布计划名称",
    "System.Description":"发布说明"
    
    可自定义字段,标识实际发布时间
    

      这里需要注意的是,TFS返回的时间,是UTC时间,比本地时间晚8个小时,我们接收后,需要做相应的ToLocalTime处理。

    三、组装钉钉消息

        经过步骤二,我们已经解析到需要的字段,下面组装成钉钉要求的格式即可,钉钉机器人支持@多个具体人,需要传入这些人的手机号:

      private static string ConstructTextTypeMsg(string content, List<string> mobiles)
            {
                var textTypeMsg = new TextTypeMsg()
                {
                    //消息类型
                    msgtype = "text",
    
                    //消息内容
                    text = new TextTypeMsg.Text()
                    {
                        content = content
                    },
    
                    //At人列表
                    at = new TextTypeMsg.At()
                    {
                        isAtAll = false,
                        atMobiles = mobiles
                    }
                };
    
                return JsonConvert.SerializeObject(textTypeMsg);
            }
    TextTypeMsg实体类定义如下:
    public class TextTypeMsg
        {
            public string msgtype { get; set; }
            public Text text { get; set; }
            public At at { get; set; }
    
            public class Text
            {
                public string content { get; set; }
            }
    
            public class At
            {
                public List<string> atMobiles { get; set; }
    
                public bool isAtAll { get; set; }
            }
        }

    四、整体流程

     

    五、总结

       经过前面三步,就将TFS中的发布计划,通过IIS中的WebAPI,调用钉钉机器人,发送到了钉钉群中,通过Coding,将微软TFS和阿里钉钉进行了联姻。

  • 相关阅读:
    一次http请求的过程
    log4j每天生成一个文件配置
    解决eclipse中maven多模块项目显示不全的问题
    docker上启动nginx,并配置修改nginx的配置文件
    springboot项目打成jar包后台运行在linux上
    《写给大家看的设计书》粗读整理
    一些需要改进的点
    b端产品的疑问
    产品经理小白初起步
    用visualvm观察远程服务器java项目的两种办法
  • 原文地址:https://www.cnblogs.com/liugh/p/6533336.html
Copyright © 2011-2022 走看看