重新拾取:TFS2017钉钉机器人源代码签入通知

http://www.cnblogs.com/79039535/p/9316791.html

现在很多公司办公都使用钉钉打卡签到,于是鉴于公司也使用钉钉就打算用钉钉来做一个源代码签入通知。

首先先去打开官方网站了解钉钉的通知,钉钉机器人提供了很多模板(GitHub啊,GitLab啊, Coding啊)

但是没有TFS~ 哈哈! 这里我们选择 自定义机器人 《钉钉开放平台机器人文档》

设置机器人名字,就是聊天对话时显示的名称

拿到webhook就可以进行服务挂钩了~。 现在登录你的TFS站点 -> 项目 -> 服务挂钩

选择已签入代码,当然可选的还有很多,可以选择发布部署,CI/CD都可以挂钩

可以提供参数写入标头,以及用户名和密码身份验证。但这里我主要是演示,就只设置URL

点击测试通过可以看到TFS给你发送的JSON这里我只要了部分信息。来显示提交时间、提交版本、作者、提交备注

测试完成后就建立好服务挂钩了~,这时候做个马上做个站点来接受这个信息

我这里是用ASP.NET Core WebAPI 建立项目,自己可以随意。

    /// <summary>
    /// 钉钉处理器
    /// </summary>
    [Route("api/[controller]")]
    public class DingTalkController : Controller
    {
        /// <summary>
        /// 钉钉机器人TFS签入挂钩
        /// </summary>
        /// <remarks>
        /// 通过TFS服务挂钩返回JSON来实现转发钉钉机器人
        /// </remarks>
        /// <returns>Task</returns>
        [IgnoreGlobalResult]
        [HttpPost("PushCommitMessage")]
        public async Task<IActionResult> PostAsync()
        {
            var result = string.Empty;
            using (var reader = new StreamReader(Request.Body, Encoding.UTF8))
            {
                result = await reader.ReadToEndAsync();
                WorkItem jsonObj = JsonConvert.DeserializeObject<WorkItem>(result);
                if (jsonObj != null)
                {
                    var content = $"提交时间:{jsonObj.resource.createdDate.ToString("yyyy-MM-dd HH:mm:ss")}\n提交版本:{jsonObj.resource.changesetId}\n作者:{jsonObj.resource.author.displayName + "|" + jsonObj.resource.author.uniqueName}\n提交备注:{jsonObj.resource.comment}";
                    var url = "https://oapi.dingtalk.com/robot/send?access_token=fc10329e2d326d2eaf81a8317asasdasffdgdffghfghdadsfsdfadsfdsfga5dac3314e98fa88d";

                    //序列化JSON
                    TextTypeMsg objMsg = new TextTypeMsg();
                    objMsg.msgtype = "text";
                    objMsg.text = new TextTypeMsg.Text();
                    objMsg.text.content = content;
                    var json = JsonConvertHelper.ToJson(objMsg);

                    var request = new HttpRequest(HttpMethod.Post, url);
                    request.ContentType(HttpContentType.Json.Description());
                    request.SetJson(json);

                    DingTalkResult dingTalkResult = JsonConvertHelper.ToObject<DingTalkResult>(request.ResultAsync().Result);
                    OperationResult operationResult = new OperationResult();
                    if (dingTalkResult.errmsg == "ok")
                    {
                        operationResult.Code = ErrorCodeEnum.Success.ToString();
                        operationResult.Message = dingTalkResult.errmsg;
                        operationResult.Data = "";
                    }
                    else
                    {
                        operationResult.Code = ErrorCodeEnum.ThirdPartyError.ToString();
                        operationResult.Message = dingTalkResult.errmsg;
                        operationResult.Data = "";
                    }
                    return Json(operationResult);
                }
                else
                {
                    OperationResult operationResult = new OperationResult();
                    operationResult.Code = ErrorCodeEnum.SerializedError.ToString();
                    operationResult.Message = ErrorCodeEnum.SerializedError.Description();
                    operationResult.Data = "";
                    return Json(operationResult);
                }
            }
        }

    }

    public class DingTalkResult
    {
        public string errmsg { get; set; }
        public string errcode { get; set; }
    }

    public class WorkItem
    {
        public WorkItemResource resource { get; set; }
    }

    public class WorkItemResource
    {
        public int changesetId { get; set; }
        public Author author { get; set; }
        public DateTime createdDate { get; set; }
        public string comment { get; set; }
    }

    public class Author
    {
        public string displayName { get; set; }
        public string uniqueName { get; set; }
    }

    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; }
        }
    }

最终效果

参考文档

https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0.0.evfrZF&treeId=257&articleId=105735&docType=1

https://blog.csdn.net/xxdddail/article/details/73249468

原文地址:https://www.cnblogs.com/webenh/p/9962090.html

时间: 2024-10-09 12:54:42

重新拾取:TFS2017钉钉机器人源代码签入通知的相关文章

钉钉自定义机器人加签认证(HmacSHA256)C#实现

原文:钉钉自定义机器人加签认证(HmacSHA256)C#实现 0.UTF-8字符集 1.把timestamp+"\n"+密钥当做签名字符串, 2.使用HmacSHA256算法计算签名 3.然后进行Base64 encode 4.最后再把签名参数再进行urlEncode,得到最终的签名. 参数 说明 timestamp 当前时间戳,单位是毫秒,与请求调用时间误差不能超过1小时 secret 密钥,机器人安全设置页面,加签一栏下面显示的SEC开头的字符串 签名计算代码示例(Java) ?

zabbix 使用机器人报警到钉钉群聊

钉钉机器人接口脚本下载:https://www.appgao.com/files/192.html 钉钉机器人接口地址(可以点击机器人查看):webhook地址,https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx 配置报警媒介类型 配置用户报警媒介 配置用户 赋予golang-zabbix-robot-64脚本所属主组和可执行权限 配置动作 默认信息: <?xml version="1.0" encoding=&q

jenkins 集成钉钉机器人

最早做Jenkins发布完成以后通过邮件发送信息通知相关的联系人,发现邮件会受限于大家接收的设置,导致不能及时的看到相关的发布内容,公司使用钉钉做为公司内部的通讯工具,所以想通过Jenkins发布完成以后通过钉钉来通知大家,研究发现钉钉提供机器人,所以我把机器人集成进来通知相关人员. 1.创建通知人群组,添加机器人(钉钉默认自带了配置好的机器人,但是没有Jenkins机器人): 注意:钉钉机器人的配置需要在PC端完成: 2.获取自定义机器人webhook 3.jenkins 安装"Dingdin

调用钉钉群组机器人在当前群组发送Zabbix报警信息

关于钉钉机器人的创建,基本用法详见我另一篇文章<创建自定义机器人> 本实验测试zabbix版本为3.4 接下来我们将直接通过下面的操作完成zabbix报警往我们的钉钉机器人所在群组发送: 首先在附件中下载对应的程序到我们的zabbix server的AlertScriptsPath目录,可以通过以下命令查看目录所在位置 grep "AlertScriptsPath" zabbix_server.conf 更改文件的权限为运行zabbix的用户,并给执行权限 chmod 75

zabbix 配合钉钉群机器人(webhook) 报警

首先建钉钉群,添加一个自定义机器人拿到webhook zabbix添加一个报警媒介 搞一个shell脚本来启动Python脚本(直接用zabbix调Python脚本不行,不知道什么原因) vim dingding.sh echo "$1" > /tmp/dingding.log python /etc/zabbix/alertscripts/dingding.py "$1" #!/usr/bin/env python #coding: utf-8 import

自动化执行 - 钉钉机器人通知

背景 公司内部用钉钉来办公,钉钉支持机器人提醒,有各种各样的机器人提供选择,可以根据需求来定制机器人,达到提醒功能,如提醒某人请下午茶,233 思路 1. 添加机器人到群组中,这次将的是“自定义”机器人: 2. 添加后会发现有一个webhook的链接,可以点击“设置说明”查看详情 3. 可以通过post请求网这个webhook发送信息,机器人就可以在群里展示信息,文档里有定义不同的请求body: 文档地址:https://open-doc.dingtalk.com/docs/doc.htm?sp

Zabbix 3.4.3通过钉钉机器人报警

一.钉钉配置 1.添加钉钉机器人 关于钉钉的注册我这里不再过多介绍. 2.选择添加机器人 3.选择自定义机器人 4.创建完成之后记住webhook,后面用于发送消息 二.Zabbix配置 1.创建脚本 # vim /usr/local/zabbix/alertscripts/dingding_text.py #!/usr/bin/python # -*- coding: utf-8 -*- import requests import json import sys import os head

python 小脚本升级-- 钉钉群聊天机器人

一则小脚本(工作中用) 在这篇文章中写的监控的脚本,发送监控的时候 是利用的邮箱,其实在实际,邮箱查收有着不方便性,于是乎升级, 我们工作中,经常用钉钉,那么如果要是能用到钉钉多好,这样我们的监控成功后直接发送给我们的钉钉,简单方便 在钉钉开发文档有这么一个地方 ,自定义机器人 这个应该能够满足我们的办公要求吧,先来实验实验,打开钉钉,选择机器人管理. 使用自定义的机器人,点击 选择群,选择生成的机器人 然后创建, 这样我们的机器人创建成功,我们去看着文档的要求去,可惜官方没有python版本,

Jenkins与钉钉机器人实现手机端获取当前服务日志

马上要过年了,各位运维们除了因为买不到回家的火车票而嚎嚎大哭之外也开始扩容服务器和提前调整监控值,目的就是为了过一个消停的春节.可是这毕竟十天左右不在公司,要是模块真出了什么意外肯定没法第一找到日志分析问题,毕竟这几天都在串门拜年和醉生梦死中度过,走到哪都要再背一个笔记本实在太不方便了. 那么这个时候,我就琢磨使用手机端来启动服务器里脚本,让这个脚本可以去获取当前的日志,然后再把结果返回到手机端.这样就不用到哪里都带那个一看就很扫兴的公司笔记本电脑了. 使用手机端启动服务器里脚本?我又不会开发a