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和阿里钉钉进行了联姻。

  • 相关阅读:
    fn project 试用之后的几个问题的解答
    fn project 扩展
    fn project 生产环境使用
    fn project 对象模型
    fn project AWS Lambda 格式 functions
    fn project 打包Function
    fn project Function files 说明
    fn project hot functions 说明
    fn project k8s 集成
    fn project 私有镜像发布
  • 原文地址:https://www.cnblogs.com/liugh/p/6533336.html
Copyright © 2011-2022 走看看