<!-- Space: qifu -->
<!-- Parent: 后端技术&知识&规范 -->
<!-- Parent: 技术方案 -->
<!-- Parent: 基建 -->
<!-- Title: 20241226-GitlabWebhook配置 -->

<!-- Macro: :anchor\((.*)\):
     Template: ac:anchor
     Anchor: ${1} -->
<!-- Macro: \!\[.*\]\((.+)\)\<\!\-\- width=(.*) \-\-\>
     Template: ac:image
     Url: ${1}
     Width: ${2} -->
<!-- Macro: \<\!\-\- :toc: \-\-\>
     Template: ac:toc
     Printable: 'false'
     MinLevel: 2 
     MaxLevel: 4 -->
<!-- Include: 杂项/声明文件.md -->

<!-- :toc: -->

## 背景

- **Webhook服务已经部署，需要通知的服务请配置：http://172.17.229.32:18081/webhook/f93a7084-65b9-4d84-bf28-ae6cdaead1b2**
- **更换机器人修改后面的uuid就行**


实现 gitlab merge request 事件能够实时的通知到对应的群组，并 @相关人员 进行 code review 及代码合并

## 说明
### Gitlab webhook 作用
能够实现gitlab事件通知，比如说通过 webhook 触发 jenkins 自动构建，合并代码提醒等  
![](https://picture.texous.cn/baiju/webhook%20%E6%94%AF%E6%8C%81%E7%B1%BB%E5%9E%8B.png)
### Webhook 企微配置

> 由于企业微信不兼容 Gitlab 的 webhook，所有需要做一个服务进行转发，
> 服务链接：[cloud-webhook-gitlab](http://git.keyfil.com/qifu-gateway/cloud-webhook-gitlab)

#### Webhook 链接生成
##### 企微群组添加机器人
![](https://picture.texous.cn/baiju/%E4%BC%81%E5%BE%AE%E6%B7%BB%E5%8A%A0%E6%9C%BA%E5%99%A8%E4%BA%BA.png)
##### 获取 Webhook 地址.
![](https://picture.texous.cn/baiju/%E6%9C%BA%E5%99%A8%E4%BA%BA%E5%9C%B0%E5%9D%80.png)
##### 记录 `key` 参数.
- 例如 : `f93a7084-65b9-4d84-bf28-ae6cdaead1b2`
##### 生成webhook链接
- https://webhook.test.com/webhook/{key}?channel=wxwork
  - {key}：表示 webhook 生成的 key
  - {channel}（可选）：表示需要发送的渠道。现在支持 wxwork。默认 wxwork
- 例如 :  https://webhook.test.com/webhook/f93a7084-65b9-4d84-bf28-ae6cdaead1b2

### Gitlab 仓库配置 Webhook
##### 进入Webhook配置界面`settings / webhooks`
![](https://picture.texous.cn/baiju/%E4%BB%93%E5%BA%93%E9%85%8D%E7%BD%AEwebhook.png)

- URL：填写生成的 webhook 链接。比如： https://webhook.test.com/webhook/f93a7084-65b9-4d84-bf28-ae6cdaead1b2
- Trigger：勾选需要推送的事件。
- 当前支持的事件如下：
  - Push events
  - Tag push events
  - Merge request events
  - Pipeline events
- 勾选 Enable SSL verification
- 点击添加

##### 测试 Webhook
![](https://picture.texous.cn/baiju/webhook%E6%B5%8B%E8%AF%95.png)

## 附加说明

### 企微用户无法被 @提及

#### MR 提交配置没有指定对应的负责人
创建MR时需要填写 `Assignee` 字段指定对应的人  
![](https://picture.texous.cn/blog/20241226190024762.png)

#### MR消息中相关负责人没有被@提醒
![](https://picture.texous.cn/baiju/MR%E9%80%9A%E7%9F%A5%E7%BE%A4%E9%94%99%E8%AF%AF%E6%8F%90%E7%A4%BA.png)

##### 造成上面错误的原因主要有两个：
- **第一种：** Gitlab 上用户名不规范：可以通过修改用户名解决
- ![](https://picture.texous.cn/baiju/%E4%BF%AE%E6%94%B9%E7%94%A8%E6%88%B7%E5%90%8D.png)

- **第二种：** 由于公司企微 `账户/userid` 生成策略的变化，导致无法直接通过 gitlab 用户名推导出 `账户/userid`
- 老员工企微 `账户/userid`：刘晓华（XianChaoHong）
- 新员工企微 `账户/userid`：刘晓华（d0a12021606f43f19f3e8583adf16fce）

###### 按以下步骤解决问题：
- 找 `HR` 获取用户的企微账号
- 在 [cloud-webhook-gitlab](http://git.keyfil.com/qifu-gateway/cloud-webhook-gitlab) 项目配置文件中添加映射
- ![](https://picture.texous.cn/baiju/%E6%B7%BB%E5%8A%A0%E7%94%A8%E6%88%B7%E6%98%A0%E5%B0%84.png)
- 重新发布服务
- ![](https://picture.texous.cn/baiju/%E9%87%8D%E5%8F%91webhook%E9%A1%B9%E7%9B%AE.png)
- 测试MR提醒

### 消息格式
#### MR
```
[@user](/link) 提交了一个 MR 从 [source](/source) 到 [target](/targer)
> 请求信息：[MR title](mrurl)
> 状态：status
> 仓库：[repo](repo)

[@Assignee]()
```