二十八分钟,带你用 gitlab 向企业微信发出灵魂拷问

例如:


是不是想着想着,就下班了呢?哈哈。由于像灵魂拷问这样的神问题数量有限,下面也有播报新闻版的,这样就不怕提交次数多了看见重复的拷问~

材料准备
gitlab 一个,企业微信一个,能随意部署应用的机器一台(用来翻译 webhook)。
WebHook
webhook 拿大白话来说就是事后事件。当一个动作完成后,钩子函数也好,事件下发也好,总而言之,就是让我这个动作做完了,要通知告诉下一个人。例如当你测试给你提了一个新 bug 的时候,可以利用 webhook 发送消息给 oa 去 @你处理。当有人提交代码之后,可以集成 Jenkins 自动构建。
如何在 gitlab 配置 WebHook
本文以我使用的 GitLab Community Edition 11.8.1 版本为例,介绍如何配置一个当代码 push 完成后的 webhook 事件

打开 integrations,在 URL 中配置好 webhook 地址,和需要触发推送的分支。一般 dev 分支提交很频繁,没有必要推送消息。可以根据实际情况动态选择。

格式转换,gitlab 的 push webhook 格式如下,和企业微信 api 能接收的肯定是不一样的。所以需要在中间做一层转换,或者加上一些自定义的东西。在后面会讲到。

其他的事件参数可以参见 gitlab 官方文档:https://docs.gitlab.com/ee/user/project/integrations/webhooks.html
如何在企业微信中添加一个机器人
和微信一样,可以先拉两个人建一个群,然后再把他们两个踢掉。这样,你就得到了一个只有你一个人的群了。然后就可以右键群聊,添加机器人,进行随意的测试了~


ok,现在两边的 webhook 都已经探索了一遍,现在要做的就是写一个中间翻译人的应用了。让 gitlab 和企业微信能够听懂双方的对话~
webhook 翻译应用
利用 idea 自动生成一个 SpringBoot 应用,虽然有点大材小用,但是方便,快捷~整个应用的结构如图,就两个类,一个 controller 监听 gitlab 的消息,一个 HttpUtil 工具类用来请求新闻接口,获取新闻简讯给每一次的 push 消息。

本来是手动搬运了一堆灵魂拷问来生成消息的,但是小伙伴们的代码提交三下五除二就把这些灵魂拷问给用完了。然后找了几个笑话的 api,发现都不太好笑,不好笑也就算了,有的还要收费~最后用的是天行数据的 IT 资讯 API,更新不是很及时,但也够用。

每次放 50 条新闻到队列里面,当用完了再去取新的新闻。这样新闻就不会重复了。(api 接口的新闻更新有点少,如果提交次数过多,新闻更新会跟不上提交代码的速度。这样就需要多调几个 api,多拿几个新闻源了。另外如果提交次数过少,也会造成新闻更新不及时。要根据实际情况来适配~)
最终效果,实现提交代码自动 push 消息到企业微信

需要获取翻译应用源代码的小伙伴,可以关注公众号【小熊的进阶之路】回复“webhook”即可获取;

版权声明: 本文为 InfoQ 作者【📿】的原创文章。
原文链接:【http://xie.infoq.cn/article/a8436951ce3c0e1f1a53c26b2】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论