背景

时隔很久,再一次配置机器人。为当前的项目配置一个 GitHub 的机器人,但是推送 GitLab 中的相关项目事件。使用常规步骤进行配置,就会发现,消息并没有成功发送到钉钉群中。

实际使用过程中,一些机器人或者是通知工具所支持的 Webhook 的格式不同

我们熟知的

  • GitHub webhook 格式
  • GitLab webhook 格式

它们就是完全不同的 JSON 格式,这样就会出现:

  • GitLab 无法直接推送到某些机器人
  • 或者消息格式无法解析

因此,如果要解决上述提到的问题,就需要一个中间的“转换器”。幸运的是,团队历史上,老师和学长们做过一个这样的 Webhook 转化层 -- GitlabWebhookToGithub 系统

配置机器人的两种操作

一、常规操作:GitLab 直接推送钉钉

  1. 在钉钉群中添加一个 gitlab 的机器人

image.png

image.png

添加成功之后,会得到该机器人的一个 Webhook 地址

什么是 Webhook?
⭕️ Webhook 是一种事件驱动的轻量级通信,可通过 HTTP 在应用之间自动发送数据。
  1. 在对应的团队项目中找到:Setting -> Webhooks

image.png


到此,常规配置机器人就已经成功了!可以通过对项目进行评论等操作进行测试是否会发送信息

二、其他操作:使用 GitHub 机器人来推送 GitLab 的项目 event

我们如果还是按照 常规操作 的方式来进行添加。就可能会出现下述问题:

  • 机器人并没有将 event 进行推送
  • 消息格式无法解析

此时我们就需要一个中间转化器

1. 为什么需要一个“转化器”

无论是 GitLab 还是 GitHub,他们通过 Webhook 推送到接收端的都是一个 HTTP POST 请求,包含了事件的具体数据。区别在于数据结构的定义

🌰 这就好比一个是说中文的,一个是说英文的。钉钉的 GitHub 机器人是一个只听得懂 “英文”(GitHub 数据格式)的接收器。要是让他理解“中文”(GitLab 数据格式),中间就需要一个“翻译”

2. 使用团队的 GitlabWebhookToGithub 项目进行配置

  1. 来到团队 GitlabWebhookToGithub 系统的首页,点击 “新增项目配置”

image.png

  1. 配置所需要的参数信息

image.png

所需参数值来源
项目名称机器人所属的项目名称
GitlabUrlGitLab 项目地址
钉钉机器人 Token钉钉群中机器人的 Webhook 中的 Token
Secret点击 生成随机Secret 按钮生成(用于校验 Webhook)
  1. 在 GitLab 中配置 Webhook 的相关参数
    利用我们刚刚在 GitlabWebhookToGithub 系统中添加的相关参数来配置 GitLab 中的 Webhook

image.png

‼️ 这里我们需要分清楚 Webhook 中的 URL 和 Secret Token 分别是有什么作用

字段作用
URLWebhook 请求发送的目标地址
Secret Token用于校验请求来源的安全凭证

简单理解:

  • URL = 请求发送到哪里
  • Secret = 如何证明请求是合法的
大致了解一下 Webhook 的处理流程

image.png

三、最终的效果

image.png

四、结语

第一次配置这样类型的机器人的时候遇到了 “消息格式无法解析” 这样的错误。当时是学长帮忙解决了,那个时候才是第一次接触 GitlabWebhookToGithub。
这次再次遇到,配置好了之后没有发送消息,就想到了应该是没有配置中间层。再次请教了学长,为此写一篇文章来真正了解一下这个中间层


在解决过程中,还有一个很明显的感受。在团队开发过程中,当遇到难解决的问题的时候,会发现前辈们已经替你找好了最好的解决方式!这可能就是潘老师说的站在巨人肩膀上学习的好处吧!

五、参考文献

一文看懂 Webhook 是什么
GitLab 官方文档:Webhooks

标签: none

添加新评论