背景
时隔很久,再一次配置机器人。为当前的项目配置一个 GitHub 的机器人,但是推送 GitLab 中的相关项目事件。使用常规步骤进行配置,就会发现,消息并没有成功发送到钉钉群中。
实际使用过程中,一些机器人或者是通知工具所支持的 Webhook 的格式不同
我们熟知的
- GitHub webhook 格式
- GitLab webhook 格式
它们就是完全不同的 JSON 格式,这样就会出现:
- GitLab 无法直接推送到某些机器人
- 或者消息格式无法解析
因此,如果要解决上述提到的问题,就需要一个中间的“转换器”。幸运的是,团队历史上,老师和学长们做过一个这样的 Webhook 转化层 -- GitlabWebhookToGithub 系统
配置机器人的两种操作
一、常规操作:GitLab 直接推送钉钉
- 在钉钉群中添加一个 gitlab 的机器人
添加成功之后,会得到该机器人的一个 Webhook 地址
什么是 Webhook?
⭕️ Webhook 是一种事件驱动的轻量级通信,可通过 HTTP 在应用之间自动发送数据。
- 在对应的团队项目中找到:Setting -> Webhooks
到此,常规配置机器人就已经成功了!可以通过对项目进行评论等操作进行测试是否会发送信息
二、其他操作:使用 GitHub 机器人来推送 GitLab 的项目 event
我们如果还是按照 常规操作 的方式来进行添加。就可能会出现下述问题:
- 机器人并没有将 event 进行推送
- 消息格式无法解析
此时我们就需要一个中间转化器
1. 为什么需要一个“转化器”
无论是 GitLab 还是 GitHub,他们通过 Webhook 推送到接收端的都是一个 HTTP POST 请求,包含了事件的具体数据。区别在于数据结构的定义
🌰 这就好比一个是说中文的,一个是说英文的。钉钉的 GitHub 机器人是一个只听得懂 “英文”(GitHub 数据格式)的接收器。要是让他理解“中文”(GitLab 数据格式),中间就需要一个“翻译”
2. 使用团队的 GitlabWebhookToGithub 项目进行配置
- 来到团队 GitlabWebhookToGithub 系统的首页,点击 “新增项目配置”
- 配置所需要的参数信息
| 所需参数 | 值来源 |
|---|---|
| 项目名称 | 机器人所属的项目名称 |
| GitlabUrl | GitLab 项目地址 |
| 钉钉机器人 Token | 钉钉群中机器人的 Webhook 中的 Token |
| Secret | 点击 生成随机Secret 按钮生成(用于校验 Webhook) |
- 在 GitLab 中配置 Webhook 的相关参数
利用我们刚刚在 GitlabWebhookToGithub 系统中添加的相关参数来配置 GitLab 中的 Webhook
‼️ 这里我们需要分清楚 Webhook 中的 URL 和 Secret Token 分别是有什么作用
| 字段 | 作用 |
|---|---|
| URL | Webhook 请求发送的目标地址 |
| Secret Token | 用于校验请求来源的安全凭证 |
简单理解:
- URL = 请求发送到哪里
- Secret = 如何证明请求是合法的
大致了解一下 Webhook 的处理流程
三、最终的效果
四、结语
第一次配置这样类型的机器人的时候遇到了 “消息格式无法解析” 这样的错误。当时是学长帮忙解决了,那个时候才是第一次接触 GitlabWebhookToGithub。
这次再次遇到,配置好了之后没有发送消息,就想到了应该是没有配置中间层。再次请教了学长,为此写一篇文章来真正了解一下这个中间层
在解决过程中,还有一个很明显的感受。在团队开发过程中,当遇到难解决的问题的时候,会发现前辈们已经替你找好了最好的解决方式!这可能就是潘老师说的站在巨人肩膀上学习的好处吧!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。