企业通信工具审核gitlab合并请求
1、国内主流企业即时通讯企业微信腾讯出品和微信互通聊天、审批、打卡、会议、客户联系客户朋友圈、应用接入支持私有化部署。适合绝大多数国内大中小微企业客户运营场景优势明显。钉钉阿里强 OA 工作流审批、考勤、钉盘、钉会议、宜搭低代码功能重管理。制造业、传统企业、行政流程多的企业使用广泛。飞书字节跳动文档深度集成会议、多维表格、知识库适合知识型团队、互联网、研发团队。本文主要讲解用户可以通过 REST API 或钉钉机器人消息触发 MR 的批准、拒绝、关闭以及创建 Tag 等操作。2、流程图研发人员提出合并请求url将合并请求发给审核者。审核者通过钉钉发送同意合并url即可合并程功。3、实现代码依赖dependency groupIdorg.gitlab4j/groupId artifactIdgitlab4j-api/artifactId version${gitlab4j-api.version}/version /dependency dependency groupIdcom.dingtalk.open/groupId artifactIddingtalk-stream/artifactId version${dingtalk-stream.version}/version /dependency应用配置application.yamlaudit: gitlab: base-url: http://127.0.0.1:8090 # GitLab 服务器地址 token: glpat-xxxxxxxxxxxx # GitLab Personal Access Token ding: talk: robot: client-id: dingxxxxxxxxxxxx # 钉钉机器人 ClientID client-secret: xxxxxxxxxxxxxxxx # 钉钉机器人 ClientSecret钉钉监听核心代码/** * 启动 Stream 客户端监听机器人回调消息 */ PostConstruct public void start() { if (!properties.isEnabled()) { log.info(钉钉机器人 Stream 监听已禁用 (dingtalk.robot.enabledfalse)); return; } streamThread new Thread(this::doStartStreamClient, dingtalk-robot-stream); // 设置为守护线程避免应用退出时 Stream 客户端未正常关闭 streamThread.setDaemon(true); streamThread.start(); log.info(钉钉机器人 Stream 客户端已启动, topic{}, properties.getTopic()); } /** * 启动 Stream 客户端监听机器人回调消息 */ private void doStartStreamClient() { try { streamClient OpenDingTalkStreamClientBuilder .custom() .credential(new AuthClientCredential(properties.getClientId(), properties.getClientSecret())) .registerCallbackListener(properties.getTopic(), (ChatbotMessage message) - { //1、 处理消息开发者根据自身业务需求处理机器人回调 String result handleMessage(message); //2、回复消息 reply(message, result); return new JSONObject(); }) .build(); // start() 为阻塞方法需在独立线程中执行 streamClient.start(); } catch (Exception e) { log.error(钉钉机器人 Stream 客户端异常, e); } } /** * 处理消息 * * param message 收到消息 * methodName: handleMessage * return: java.lang.String * author: ybw * date: 2026/7/28 **/ private String handleMessage(ChatbotMessage message) { //1、 获取钉钉消息内容 String content message.getText().getContent(); //2、判断是否有同意合并关键字 if (!content.contains(同意合并)) { //2.1 不包含 return 没有同意合并关键字; } //2.2 包含 //2.2.1 获取合并链接地址 String mergeRequestUrl MyStrUtil.getMergeRequestUrl(content); log.info(合并请求地址{}, mergeRequestUrl); if (StrUtil.isBlank(mergeRequestUrl)) { return 无合并请求链接地址; } //2.2.2 发送合并请求 ApproveByUrlRequest request new ApproveByUrlRequest(mergeRequestUrl); AuditResult auditResult auditService.approveMrByUrl(request); return auditResult.getMessage(); } /** * 回复消息 * * param message 收到消息 * param result 处理结果 * methodName: reply * return: void * author: ybw * date: 2026/7/28 **/ private void reply(ChatbotMessage message, String result) { try { //1、 使用 sessionWebhook 回复消息 String sessionWebhook message.getSessionWebhook(); if (StrUtil.isBlank(sessionWebhook)) { return; } //2、回复消息使用 sessionWebhook 回复消息 BotReplier replier new BotReplier(sessionWebhook); replier.replyText(处理结果 result); log.info(已通过 sessionWebhook 回复消息); } catch (Exception e) { log.error(reply error, e); } } /** * 停止 Stream 客户端 */ PreDestroy public void stop() { if (streamClient ! null) { try { streamClient.stop(); log.info(钉钉机器人 Stream 客户端已关闭); } catch (Exception e) { log.error(关闭 Stream 客户端失败, e); } } if (streamThread ! null streamThread.isAlive()) { streamThread.interrupt(); } }审核核心代码/** * 通过 MR 链接地址批准 MR */ public AuditResult approveMrByUrl(ApproveByUrlRequest request) { // 1. 解析 URL提取项目路径和 MR IID GitLabApiClient.MrUrlInfo urlInfo gitLabApiClient.parseMrUrl(request.getMrUrl()); log.info(解析 MR URL: projectPath{}, mrIid{}, urlInfo.projectPath(), urlInfo.mrIid()); // 2. 将项目路径解析为项目 ID Long projectId gitLabApiClient.resolveProjectId(urlInfo.projectPath()); // 3. 委托给现有的 approveMr 逻辑 ApproveRequest approveRequest new ApproveRequest(); approveRequest.setProjectId(projectId); approveRequest.setMrIid(urlInfo.mrIid()); return approveMr(approveRequest); }4、使用钉钉用户发送同意合并http://172.168.0.2/test/git-audit/-/merge_requests/1钉钉返回消息处理结果MR 已批准并合并。

相关新闻

破局传统商务拓展困局:Sifted Network 以 AI 智能体解决企业全球化增长六大核心痛点

破局传统商务拓展困局:Sifted Network 以 AI 智能体解决企业全球化增长六大核心痛点

在存量竞争加剧、全球化渠道碎片化的商业环境下,无论是外贸工厂、品牌方、科技初创企业还是服务商,传统商务拓展(BD)模式早已暴露系统性短板:线下展会重金投入却线索稀薄、业务员海量人工筛选客户效率低下、海外社媒商…

2026/10/14 19:41:51 阅读更多 →
Claude Opus 5:从提示词到游戏 AI,生成成本趋近零但评估难,个性化体验待突破

Claude Opus 5:从提示词到游戏 AI,生成成本趋近零但评估难,个性化体验待突破

Claude Opus 5:从提示词到游戏 AI,生成易但评估难,个性化游戏体验仍待突破 一份提示词烧 6.9 亿 token 花费 423 美元后,Vyom 得到自带物理引擎的赛艇游戏 Wave Racer。该游戏基于 Three.js 构建,有细胞着色渲染风格&a…

2026/10/14 19:41:02 阅读更多 →
AI+蓝牙RSSI信号定位:从原理到实践,实现近场设备查找

AI+蓝牙RSSI信号定位:从原理到实践,实现近场设备查找

你的手机又找不到了吗?在沙发缝里、枕头底下,或者干脆忘在了会议室?对于现代人来说,“手机去哪儿了”的焦虑,几乎和电量焦虑一样普遍。传统的解决方案无非是打电话、用智能手表查找,或者依赖“查找我的iPho…

2026/10/10 5:08:38 阅读更多 →

最新新闻

iphone prores视频在windows用命令行一行转mp4

iphone prores视频在windows用命令行一行转mp4

背景情况和需求 iphone打开了prores录制了巨大的130g的一个4k原视频, 我不需要保留这么大的视频又希望能保留其视频内容, 我希望能压缩然后只需要正常视频即可不用这么详细的原视频. 限制条件: iphone存储爆满了, 没什么空间给我原地转换, 或用专业软件如剪映打开并转换; 我的电…

2026/10/14 19:41:51 阅读更多 →
AI幻觉八年未愈:从概率生成到RAG工程治理的实战指南

AI幻觉八年未愈:从概率生成到RAG工程治理的实战指南

1. 从“八年祭”说起:AI幻觉为什么值得反复拿出来讲“AI幻觉”这个词,这几年被说得太多,多到有点麻木。但如果你真的在一线做过模型落地,就会知道它从来不是一个学术名词,而是一个会实实在在让人半夜爬起来改代码、写道…

2026/10/14 19:41:51 阅读更多 →
客户发来 7 个 Excel 说“数据都在这了“:我清洗了三个晚上的完整实录(烂表变准的 5 个步骤)

客户发来 7 个 Excel 说“数据都在这了“:我清洗了三个晚上的完整实录(烂表变准的 5 个步骤)

前两天一个客户准备上系统,跟我说"数据我都整理好了,你导吧",然后甩过来 7 个 Excel 文件。我一个个点开,看到第三个的时候沉默了。 给大家看看里面是什么样的:合并单元格做的大表头;数字存成了文…

2026/10/14 19:41:51 阅读更多 →
MySQL max_allowed_packet参数引发的数据库故障排查与调优指南

MySQL max_allowed_packet参数引发的数据库故障排查与调优指南

1. 事故现场:一个参数让我半夜爬起来救火先交代一下背景。那天晚上我本来已经睡下了,手机突然连着震了七八下——值班群里有人刷屏:订单服务全线报错,支付回调大面积失败,用户侧反馈下单直接转圈超时。我爬起来打开电脑…

2026/10/14 19:41:51 阅读更多 →
MySQL max_allowed_packet参数引发应用崩溃:一场事故的完整复盘与预防

MySQL max_allowed_packet参数引发应用崩溃:一场事故的完整复盘与预防

1. 事故还原:从连接数与CPU都没问题说起凌晨两点多,某线上核心服务开始告警。我打开监控平台时心里已经预演了好几种可能:连接数被打满、慢查询堆积、磁盘快满。结果画面对不上——max_connections 还有一半余量,CPU 负载连 20% 都…

2026/10/14 19:41:51 阅读更多 →
iso8211lib解析S-57电子海图:从二进制格式到坐标提取指南

iso8211lib解析S-57电子海图:从二进制格式到坐标提取指南

简介:ISO8211lib是一套解析和生成ISO 8211标准数据文件的C库,主要面向GIS、地球科学、遥感与测绘领域的开发者和数据专业人员,解决不同系统间多元地理数据交换与集成的读取、写入和操作问题。ISO 8211标准定义了地质、气候、地形等数据的组织…

2026/10/14 19:40:51 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →