基于 Gitlab 进行开发团队管理的尝试——03.Dingding 消息 @人

相关代码提交至 GitHub -> https://github.com/wangyuheng/keeper 欢迎提交 issue

What

监听 Gitlab Hook 事件, 紧急消息通过 钉钉机器人 发送至钉钉群组, 并 @(提醒) 相关方。 同时自动流转 issue 的 pipeline.

Why

  1. 紧急事项实时提醒到人
  2. 定制 pipeline & 自动流转

为什么不通过钉钉自带的 GitLab 机器人 或者 GitLab notify email?

  1. 发送的消息过多, 会忽略有意义的信息
  2. 不能 @ 到相关的人, 达不到提醒的作用

How

image.png

pipeline

根据团队状况制定 pipeline, 基于事件自动流转。 比如:

  1. 新建 :WIP MR 时流转至 doing
  2. CICD 流转至 deploy
  3. 发布成功后流转至 verify 并修改 assignee 为 author

image.png

Emergency issue

通过 label 判断是否为紧要消息, 比如 BugP0.

image.png

core code

    private fun handlerIssue(body: JSONObject) {
        if (GitlabHookBodyHelper.isClose(body)) {
            //已关闭的issue不做处理
            return
        }
        val changedAssignee: GitlabHookBodyHelper.Assignee? = getChangedAssignee(body)
        log.info("handler issue changedAssignee: $changedAssignee")
        val labelTitles: MutableSet<String> = GitlabHookBodyHelper.listLabelTitle(body)
        log.info("handler issue labels: $labelTitles")
        // 是否变更assignee
        if (changedAssignee != null) {
            val developer = developerRepository.findByUsername(changedAssignee.username!!)
            // 为开发人员 && label为todo且不在进行中
            if (developer != null && labelTitles.isTodo() && !labelTitles.isProcessing()) {
                when {
                    labelTitles.isBug() -> sendBugMsg(body, developer.mobile)
                    labelTitles.isP0() -> sendEmergencyMsg(body, developer.mobile)
                    else -> log.info("ignore issue change! labelTitles -> $labelTitles")
                }
            }
        } else {
            if (GitlabHookBodyHelper.isFirstChangeToVerifyLabel(body)) {
                val author = getAuthor(body)
                val assigneeUsername = editAssignee(body, author)
                val mobile = developerRepository.findByUsername(assigneeUsername)?.mobile
                if (null != mobile) {
                    sendVerifyMsg(body, author, mobile)
                }
            }
        }
    }

小技巧

非内网部署 GitLab 如何开发调试

ngrok 实现内网穿透

    brew cask install ngrok

验证阶段的 issue 关闭不及时

先自动 close issue, 并 dingding 提醒。 如果有问题可以 reopen 并自动流转至 Doing.

  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    34 引用 • 67 回帖
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    13 引用 • 66 回帖 • 491 关注
1 操作
crick77 在 2020-02-03 21:49:04 置顶了该帖
2 回帖
请输入回帖内容...
  • crick77

    @88250 感觉最近帖子的浏览量好低啊。。。

    1 回复
  • 88250

    也许是因为疫情的原因吧。