Git操作自动触发企业微信机器人webhook
[本文出自天外归云的博客园]
背景
在git做一些merge或push的操作,我们希望可以自动在企业微信群发送自定义的通知。
服务代码
这里选用php作为网络服务的开发语言,关键的代码如下(githook函数就是对应webhook的服务函数):
<?php class tools extends CI_Controller { function __construct() { parent::__construct(false); $this->load->helper('url'); $dir = APPPATH . "config/conf"; $confFile = "{$dir}/autotestconf.json"; $this->load->library('conffile'); $this->confData = $this->conffile->getConfData($confFile); $this->nav_top = $this->conffile->get_nav_top($this->confData); $this->load->database(); $this->load->model("tools/tools_model"); } // 代码CodeReview自动企业微信报告服务等githook服务 // 请求路径:http://localhost/cloud/tools/githook function githook() { $key = $this->input->get('key'); $post_data = file_get_contents("php://input"); $post_data_std_class = json_decode($post_data); $curl = curl_init(); if ($post_data_std_class->object_kind == "merge_request") { if ($post_data_std_class->object_attributes->target_branch != "master") { return; } $commitUrl = $post_data_std_class->object_attributes->url; $postFields = "{\r\n \"msgtype\": \"text\",\r\n \"text\": {\r\n \"content\": \"" . $post_data_std_class->user->username . " " . $post_data_std_class->object_attributes->action . " Merge Request " . $commitUrl . "\n\nFrom " . $post_data_std_class->object_attributes->source_branch . " To " . $post_data_std_class->object_attributes->target_branch . "\nTitle: " . $post_data_std_class->object_attributes->title . "\nDescription:\n" . $post_data_std_class->object_attributes->description . "\"\r\n }\r\n}"; } else if ($post_data_std_class->object_kind == "push") { $branch = substr($post_data_std_class->ref, 11); if ($branch != "master") { return; } $commitMessage = "【".$post_data_std_class->commits[0]->message."】"; $http_url = substr($post_data_std_class->repository->git_http_url, 0, -4); $commitUrl = $http_url . "/commits/" . $branch; $postFields = "{\r\n \"msgtype\": \"text\",\r\n \"text\": {\r\n \"content\": \"" . $post_data_std_class->user_name . " Push To " . $commitUrl . "\n\n" . $commitMessage . " \"\r\n }\r\n}"; } curl_setopt_array($curl, array( CURLOPT_URL => "http://in.qyapi.weixin.qq.com/cgi-bin/webhook/send?key=" . $key, CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => $postFields, CURLOPT_HTTPHEADER => array( "Cache-Control: no-cache", ), CURLOPT_SSL_VERIFYHOST => 0, CURLOPT_SSL_VERIFYPEER => 0, )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { echo $response; } } }
Git配置
在git项目Setting-Advanced Settings-Web Hooks中勾选Trigger(触发条件)-Add Web Hook(把自己的网络服务请求地址填上去,也就是上面的githook函数的请求地址):
请求url带的参数key为企业微信机器人的webhook地址(在企业微信群创建企业微信机器人后即可看到该地址)。
至此就可以在指定trigger被触发(比如有人进行了push操作)时,自动发送你服务函数中自定义的消息体到指定webhook的企业微信群。
注意:git操作触发的消息内容在请求的post body中,而我们自己传的key在请求的get参数中。
本文来自博客园,作者:天外归云,转载请注明原文链接:https://www.cnblogs.com/LanTianYou/p/10395678.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」