上一篇文章中我们提到了azure为我们提供了可自定的web hook,于是我打算实践一下
我假设了一种场景就是,我希望我可以及时收到团队中所有开发人员的代码提交记录,于是乎我想通过web hook打通钉钉的通知,每次有人提交代码的时候钉钉都会发一条消息到开发人员的群里,让大家都知道,谁刚刚提交了代码。(比如在座的各位卷王,希望我周六日提交了代码可以及时被领导看见~)
首先,我们要先在钉钉新建一个通知机器人用来发送通知。
打开钉钉的一个群聊,在管理选项中选择群助手,创建一个自定义机器人
然后我们需要配置一下机器人的一些选项,验证配置中建议用一个就是关键字认证,只有你发的消息里又这个关键词钉钉机器人才会发送这条消息,同时钉钉会生成一个请求的URL
这个请求上带着一个token,是用来区分机器人的,这个要保存好,请求的时候直接请求这个链接就可以,非常简单。
创建好钉钉机器人之后,我们需要自己写一个简单的web应用来接受azure的消息推送,然后调用钉钉的接口把我们的消息推送到钉钉上去。我这里用java写了一个简单的demo
@RequestMapping("/accept") public ResponseEntity<String> acceptWebHook(HttpServletRequest request ,@RequestBody JSONObject body ){ LOGGER.info("收到azure推送过来的消息:{}",JSON.toJSONString(body)); DingTalkDTO dingTalkDTO=new DingTalkDTO("azure推送"+ JSON.toJSONString(body)); RestTemplate restTemplate=new RestTemplate(); ResponseEntity<String> res=restTemplate.postForEntity(DingTalkUrl,dingTalkDTO,String.class); LOGGER.info("钉钉响应结果:{}",res); return res; }
demo编写好之后,我们给他运行到一个公网可以访问到的地址上去。
接下来,我们开始配置azure的webhook,打开仓库的管理,点击左侧的 Service Hook,选择web hooks,然后我们选择触发事件为code pushed,需要要监听的代码仓库和分支
填入我们刚才写好的服务地址,azure就会把消息推送到我们的服务上去,配置好之后我们运行一下看看效果。
我提交了一部分代码之后 ,看一下通知的效果,控制台日志输出已经收到了azure的推送,并且成功的调用了钉钉的接口,发送了通知,并且钉钉也收到了消息。
azure推送的数据结构比较繁琐,我们可以选出自己需要的字段进行加工后,推送适合自己的消息。
到这里azure git仓库和钉钉的交互就完成了,当然还有很多别到花样可以玩,这里我只是简单的写了一个demo,下一篇文章,我们将继续探索azure devops的其他功能。