当前位置: 首页 > news >正文

GitLab 配置 webhook

前言:

GitLab 是一个开源的代码托管平台,相信大家都使用过它,它提供了许多功能,如版本控制、代码管理、issue跟踪、合并请求等,这些功能也是我们项目开发中使用的最多的功能,本篇我将分享一下 GitLab 的 webhook 功能。

背景:

公司技术总监提出一个管理层面的需求,想知道技术团队成员每天提交了多少代码,实现这个需求就需要依赖 GitLab 的数据统计功能了,我的团队接到总监的这个需求之后,我就开始了调研,简单调研后有三个方案,如下:

  1. 通过 GitLab API 获取数据。
  2. 通过访问 GitLab 数据库获取数据。
  3. 通过 GitLab webhook 获取数据。

以上三个方案理论上都是可行的,但是 GitLab 的运维部门不允许直接访问 GitLab 数据库,因此方案2直接被淘汰,方案一和方案三可行,本篇简单分享一下通过 GitLab webhook 来获取用户提交代码的相关数据。

GitLab webhook 是什么?

GitLab webhook 是 GitLab 提供的一种事件机制,用于将 GitLab 仓库中的事件如代码提交、合并请求、issue创建等实时通知到外部系统。以下是对其原理、作用和使用场景的简单介绍:

原理:

GitLab webhook 的原理非常简单,当 GitLab 仓库发生事件时,GitLab 会向预先配置好的 URL 发送 POST 请求,请求体中会包含事件的相关信息,对应 URL 的系统收到请求后,可以根据请求中的信息进行数据分析集成。

作用:

GitLab webhook 可以非常方便地实现各种功能,例如代码统计、代码审核、持续集成等。

使用场景:

  • 代码统计:使用 webhook 功能可以统计代码提交量、代码提交时间、代码提交人等信息,实现代码统计功能。
  • 代码审核:使用 webhook 功能可以实现代码审核功能,例如代码提交后,可以自动触发代码审核,并通知审核人进行审核,代码合并也是一样。
  • 持续集成:使用 webhook 可以实现持续集成功能,例如代码提交后,可以自动触发构建任务。

如何配置 GitLab webhook

在左侧菜单中选择“Settings” -> “Integrations”,点击“Add webhook” 按钮,就可以完成 webhook 的创建,截图如下:

在这里插入图片描述

webhook 的创建可以分项目和全局,因为我不是 GitLab 的管理员,所以只有项目级别的 webhook的配置权限。

应用完成 webhook 请求的接收

我们只需要在应用代码中暴露一个接口,用来接收 webhook 请求,然后解析请求体中的信息,并进行数据分析处理即可(注意应用的鉴权处理),代码如下:

@PostMapping("/web-hook/git-lab")
public void handleGitLabPushEvent(@RequestBody Map<String, Object> payload,@RequestHeader("X-Gitlab-Token") String token) {String json = payload.toString();try {//业务处理分析String objectKind = (String) payload.get("object_kind");} catch (Exception e) {}
}

这里我只是简单的写了一个接口来接受webhook请求,具体逻辑根据自己的业务需求进行拓展实现。

webhook 和 API 方式对比

webhook 优点:

  • webhook 是一种事件机制,用户触发相关事件后,即可实时获取到相关数据进行分析,数据实时性较好。
  • webhook 可以分担系統压力,用户触发相关事件后,即处理相关数据,无需定时处理。

webhook 缺点:

  • webhook 是事件机制,如果出现网络抖动等其他原因,可能会造成数据丢失。

API 优点:

  • API 用户可以自定义请求参数,因此用户可以定制自己的需求。
  • API 可以主动去请求 GitLab 数据,可以在一定程度上预防了数据丢失问题,例如网络抖动的时候可以重新发起请求拉取数据。

API 缺点:

  • API 是应用程序主动请求 GitLab,数据实时性不高,且可能对服务器造成一定的压力。

总结:本篇简单分享了如何在 GitLab 上配置 webhook,希望可以帮到正需要的你。

如有不正确的地方欢迎各位指出纠正。

http://www.xdnf.cn/news/573319.html

相关文章:

  • 越小越优先和越大越优先
  • oracle使用SPM控制执行计划
  • 使用Redis的Bitmap实现了签到功能
  • iPaaS集成平台技术选型关注哪些指标?
  • HJ20 密码验证合格程序【牛客网】
  • 测试W5500的第4步_使用ioLibrary库创建UDP客户端和服务器端
  • 数据结构核心知识总结:从基础到应用
  • 6-码蹄集600题基础python篇
  • Mysql数据库相关命令及操作
  • 链表-两两交换链表中的节点
  • Mysql差异备份与恢复
  • Python图像处理全攻略:从基础到前沿技术深度剖析
  • 极大似然估计与机器学习
  • python查询elasticsearch 获取指定字段的值的list
  • 操作系统期末复习(一)
  • 淘宝扭蛋机小程序开发:开启电商娱乐新玩法
  • 工程项目交付质量低?如何构建标准化管理体系?
  • C++网络编程入门学习(四)-- GDB 调试 学习 笔记
  • 第9.1讲、Tiny Encoder Transformer:极简文本分类与注意力可视化实战
  • 计算机操作系统(十)调度的概念与层次,进程调度的时机与进程的调度方式
  • LVLM-AFAH论文精读
  • GitHub SSH Key 配置详细教程(适合初学者,Windows版)-学习记录4
  • CESM2.0 全流程解析:从环境搭建到多模块耦合模拟
  • 打开小程序提示请求失败(小程序页面空白)
  • Python实现蛋白质结构RMSD计算
  • RAG 挑战赛冠军方案解析:从数据解析到多路由器检索的工程实践,推荐阅读!
  • Android Framework开发环境搭建
  • 【Linux庖换现象丁解牛】—进程程序替换!
  • python训练营打卡第30天
  • C++--string类对象