博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
重新拾取:TFS2017钉钉机器人源代码签入通知
阅读量:5745 次
发布时间:2019-06-18

本文共 4512 字,大约阅读时间需要 15 分钟。

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

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

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

但是没有TFS~ 哈哈! 这里我们选择 自定义机器人 《

 

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

 

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

 

 

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

 

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

 

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

 

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

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

///     /// 钉钉处理器    ///     [Route("api/[controller]")]    public class DingTalkController : Controller    {        ///         /// 钉钉机器人TFS签入挂钩        ///         /// 
/// 通过TFS服务挂钩返回JSON来实现转发钉钉机器人 ///
///
Task
[IgnoreGlobalResult] [HttpPost("PushCommitMessage")] public async Task
PostAsync() { var result = string.Empty; using (var reader = new StreamReader(Request.Body, Encoding.UTF8)) { result = await reader.ReadToEndAsync(); WorkItem jsonObj = JsonConvert.DeserializeObject
(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
(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
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

 

你可能感兴趣的文章
浅析Objective-C字面量
查看>>
dojo 与j Query一些常用API上的命名和参数的对比
查看>>
Dojo DOM 函数[转]
查看>>
JavaScript 基础,登录前端验证
查看>>
xmlrpc
查看>>
XSS跨站脚本攻击
查看>>
Js中this机制全解
查看>>
VS扩展异常(未解决)
查看>>
数据结构上机实验之二分查找
查看>>
JAVA获取一个图片路径后,下载该图片再重新上传至指定路径中
查看>>
angularJS中XHR与promise
查看>>
linux命令之 df file fsck fuser
查看>>
DP SRM 661 Div2 Hard: ColorfulLineGraphsDiv2
查看>>
2017-4-21 ADO.NET的六大对象
查看>>
按之字形顺序打印二叉树
查看>>
oracle日期函数转换真麻烦。。。
查看>>
java jdk动态代理(proxy)
查看>>
python3.3链接mysql5.1
查看>>
Asp.net MVC + Redis(Linux安装Redis)
查看>>
Linux练习(读取改变环境变量)
查看>>