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参数中。
Git操作自动触发企业微信机器人webhook的更多相关文章
- PostMan向企业微信机器人传送数据测试
1 在企业微信中创建机器人 获取:webhook 地址 2.在Postman软件中创建Post文件 Post文件请求类型要与机器人所接受的类型一致.Get 或者 Post Url地址为上面webh ...
- 拉仇恨!webhook + 企业微信给同事做了个代码提交监听工具
本文案例收录在 https://github.com/chengxy-nds/Springboot-Notebook 大家好,我是小富~ 最近接个任务,用webhook做了个代码提交监听功能,就是有人 ...
- [企业微信通知系列]Jenkins发布后自动通知
一.前言 最近使用Jenkins进行自动化部署,但是部署后,并没有相应的通知,虽然有邮件发送通知,但是发现邮件会受限于接收方的接收设置,导致不能及时看到相关的发布内容.而由于公司使用的是企业微信,因此 ...
- jenkins构建结果企业微信提醒
每当jenkin在构建之后我们想把构建结果SUCCESS/FAILURE或者其他信息通知给其他人,也许有人会说,不是有邮件提醒吗?但是我这里的环境邮件提醒的话所被通知者并不会第一时间去阅读,所以我们用 ...
- 基于 Serverless +企业微信打造 nCoV 疫情监控小助手
最近的一些疫情信息很让人揪心,为了方便大家掌握疫情信息,在空闲之余做了一个关于 nCoV 的疫情监控小助手.主要的功能是通过企业微信的 WebHook 来推送疫情信息.这里将使用 Serverless ...
- 参照企业微信审批业务,在Winform开发框架中工作流模块的实现业务审批
目前微信的企业号已经切换到企业微信里面,这个是一个APP程序,提供了很丰富的企业应用,其中包括了业务审批处理,审批业务包括请假.报销.费用.出差等很多个审批场景,在Winform开发框架中工作流模块这 ...
- CabloyJS一站式助力微信、企业微信、钉钉开发 - 企业微信篇
前言 现在软件开发不仅要面对前端碎片化,还要面对后端碎片化.针对前端碎片化,CabloyJS提供了pc=mobile+pad的跨端自适应方案,参见:自适应布局:pc = mobile + pad 在这 ...
- Python自制微信机器人:群发消息、自动接收好友
运营公众号也有半年了,今年5月份开始的,之前一直用一款windows工具来运营自动接受好友请求.群发文章.自动回复等操作,但颇有不便. 举几个场景: 突然在外面看到一篇文章很好,临时写了一篇,想群发一 ...
- C#-MVC开发微信应用(5)--自动应答系统-自动回复机器人
前几篇已经介绍菜单和有回复信息操作,下面我们就结合snf微信端管理页面,看一下什么才是自动应答系统. 定制的服务 对于微信服务号来说,最主要的功能是提供更好的服务.用户更方便的操作,以及更快的反馈响应 ...
随机推荐
- 如何在ElementUI中的Table控件中使用拼音进行排序
本人使用版本是1.4.7 在这个版本中对应全是String的column进行排序并不是按照拼音的方式排列的. 这里我贴一下源代码就可以看出是为什么了: export const orderBy = f ...
- BZOJ.5093.[Lydsy1711月赛]图的价值(NTT 斯特林数)
题目链接 对于单独一个点,我们枚举它的度数(有多少条边)来计算它的贡献:\[\sum_{i=0}^{n-1}i^kC_{n-1}^i2^{\frac{(n-2)(n-1)}{2}}\] 每个点是一样的 ...
- [PA2014]Muzeum
[PA2014]Muzeum 题目大意: 有\(n\)件展品和\(m\)个警卫,每件展品有一个坐标\((x_i,y_i)\)和价值\(v_i\),每个警卫的坐标为\((x_i,y_i)\).每个警卫面 ...
- React Native小白入门学习路径——三
迷茫,真的迷茫. 或许是自己努力的还不够吧,在学习的过程中遇到了很多问题,自己尝试借助搜索引擎解决问题,无奈国内的教程写的还很基础,涉及到稍微具体一点的问题时讲解就比较少更新也比较慢,绝大多数还是很早 ...
- python-循环小练习
作业:登录程序,最多循环输入三次,账号密码校验输入为空的情况: 知识点总结 1.while和for循环的区别是,1个需要定义计数器,1个不需要定义计数器: 2.break正常循环结束后会用到,意思是不 ...
- visual studio 设计第一个WinForm小程序
WinForm小程序之消息框 首先打开visual studio 软件,然后[文件]-[新建]-[项目]-[Visual C#]-[Windows],选择Windows窗体应用程序,根据自己的需要修改 ...
- Spring+Quartz实现定时任务的配置方法(转)
1.Scheduler的配置 <bean id="myScheduler" class="org.springframework.scheduling.quartz ...
- Vue(四)事件和属性
1. 事件 1.1 事件简写 v-on:click="" 简写方式 @click="" <button v-on:click="show&quo ...
- HTML5 学习05—— 拖放(Drag 和 Drop)
拖放(Drag 和 drop)是 HTML5 标准的组成部分.即抓取对象以后拖到另一个位置. 例:将w3cschool图标拖动到矩形框中. <script> function allowD ...
- 我所知道的JS调试
前言 任何一门语言都有对应的调试方法,也有对应的调试工具,JavaScript当然也不例外.最常用的莫过于浏览器这个调试工具了.而今天我们要讲的对于这个基础调试就不细说,我会将目前所有调试javasc ...