Hope-Phenom / wx-gitlab-robot

gitlab集成企业微信机器人消息通知

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

wx-gitlab-robot

OSCS Status

让gitlab事件直接在企业微信中发起提醒,替代传统的邮件提醒,达到更好的消息送达率。

gitlab-robot-process

最开始做这个项目的目的是为了建立一套Merge RequrestCode Review消息通知机制,整个的Merge Request机制如下:

  1. 用户发起Merge Request,同时在Merge Request中的description去@对应用户,被@的用户会做为Code Reviewer来为你的代码进行Code Review,会在企业微信群中对被@的用户发起通知,提醒前去进行Code Review。通知的消息为在MR中title项填写的内容。
  2. Code Reviewer进行Code Review后认为没有代码质量问题,则在Merge Request的评论中回复 1 或者 done,当所有Code Reviewer都评论过后,则认为代码质量审核通过。
  3. Code Review通过后,随即发起Merge Request提醒合并通知,通知人为该仓库的 author 以及在发起Merge Requestassignee指定的用户
  4. Merge Request合并完成后,发起该Merge Request已被合并的通知,并通知发起人。

MR消息提醒

目前支持以下gitlab事件的webhook

gitlab webhook

配置gitlab webhook

接口路径: /gitlab_hook, 即项目部署的地址加上此路径,即为gitlab webhook Url.

Secret Token: gitlab-webhook, 给项目中添加webhook时,需要填写的选项,增强接口安全性, 默认为gitlab-webhook, 可在src/appConfig.ts中修改

Secret Token

merge_request

提供对gitlab webhook中merge_request事件支持,目前支持以下类型提醒:

  • 新开Merge Request时,提醒仓库作者和assignee指定的用户

    当发起MR时没有在description中指定Code Reivew人员时,通知如下

    发起MR

    当指定了Code Review人员时, 通知如下

    发起MR通知

  • Merge Request发生更新时(除Title和Label更新)提醒

    更新MR

  • Merge Request被合并时通知仓库作者和assignee指定的用户

    MR合并完成

note

提供对Merge Request中发生评论时的事件提醒功能,目前支持以下类型提醒

  • Merge Request中发生评论时

    代码评论事件

  • Merge Request中对代码进行评论时

    当在Merge Request中评论1或者done且评论人为Code Review人员时,则认为代码审查通过

    CR完成时

pipeline

支持pipeline事件的提醒。当pipeline运行成功后提醒。

定时任务

制订了一个定时任务,用于非周末的每一天查询所有项目是否还有未处理的Merge Request,将向对应项目的机器人发送一条待办事项的通知

gitlab api

api url

本项目中使用到了gitlab的 REST API,请根据您实际使用的gitlab 服务确定api地址。 配置路径: src/appConfig.ts

access_token

本项目中使用到了gitlab api, 访问gitlab api需要使用access_token, token 配置在 src/appConfig.ts中,请在此替换您的token。

企业微信机器人

上述gitlab webhook提醒功能依赖于企业微信机器人,由机器人负责发送消息到企业微信群,每个机器人具有唯一的key,请保管好群机器人key值,防止泄漏

官方配置说明

机器人key的配置

在代码中src/config/projectKeys文件中,维护了一份群机器人key与gitlab项目信息的映射关系,参考以下配置进行修改

module.exports =module.exports = {
  //  gitlab projectName
  "project name": {
    id: "<project id>", // gitlab project id
    key: "<your robot key>" // 企业微信机器人key
  }

gitlab-project

如何在发送消息时@企业微信用户

由于通过接口发送消息时,无法直接通过@用户名去@对应用户,想要@用户必须使用用户id。 用户ID根据每个公司的设置规则而有所不同,需要找到公司里管理企业微信后台的管理员索要用户ID设置规则。

在代码中会对gitlab事件相关的用户进行查询,以得到其中文名,然后根据用户ID规则进行一个转换以得到真实用户ID,这样才能正确的@用户。

相关代码在src/utils/index.ts中的 usernameToUserid方法,请根据不同的ID规则修改

关于代码评论与MR评论

这两个评论事件在 GitLab 中都是 Note 事件,通过区分事件中的属性从而判断是代码评论还是MR事件本身的评论

这是 MR 评论

MR 评论

这是代码评论

代码评论

之所以选择使用MR评论作为 Code Review完成的标志,因为我的项目中使用的是gitlab 12版本,本来最开始是选用gitlab 的 approval 作为 Merge Request 的代码审批规则的,但是需要13.2版本以后才开始支持,所以只得放弃。由于采用评论作为Code Review通过与否的判断,所以需要团队间达成一个行为约定。

如何打包和部署

首次部署

  1. 准备一台具有node环境的服务器
  2. 在本项目中使用yarn buildnpm run build命令打包得到 out 文件夹。
  3. 将 out 文件夹下的所有文件拷贝到服务器指定的目录,然后切换到目录下,使用 yarnnpm i安装依赖
  4. 在目录下执行命令 pm2 start pm2.json即可成功启动服务(默认监听端口为16080,可在pm2.json中修改)

版本更新

  1. 进入部署服务的服务器,切换到项目所在的目录
  2. 将本次打包的代码拷贝进来,覆盖老版本代码
  3. 执行命令pm2 restart webhook-server。(webhook-server是pm2启动的项目的名字,可在pm2.json中修改)

About

gitlab集成企业微信机器人消息通知

License:MIT License


Languages

Language:TypeScript 95.5%Language:JavaScript 4.2%Language:Shell 0.4%