记录一下用PHP搭建webhook的过程

webhook搭建基于gitee
效果:

记录一下用PHP搭建webhook的过程

设置钩子:

记录一下webhook的搭建过程

假如设置的端口是:8001记得去服务器开放对应的端口号

准备步骤

  1. 去把php.ini中的shell_exec的函数禁用取消掉
  2. 使用服务器的www用户创建秘钥ssh-keygen,并配置到项目上(!!最重要,不然因为权限问题处理不了git命令)方法是把 /etc/passwd 中的www的nologin设置成/bin/bash,然后去执行ssh-keygen -t rsa -b 4096 -C " your_email@example.com"生成秘钥,查看生成的秘钥去配置好就可以。

处理脚本

<?php
// 秘钥
$secret = "xxx";

// 接入钉钉发布通知
$webhook = "https://oapi.dingtalk.com/robot/send?access_token=xxx";

$json = file_get_contents("php://input");
if(empty($json)){
    die("require is empty!");
}

$data = json_decode($json, true);
if($data['password'] != $secret){
    die("password error!");
}

// 如果是test分支提交,才进行操作
if($data['ref'] == 'refs/heads/test'){

    shell_exec("cd your_project && git checkout test && git pull");

    $message="测试环境代码自动发布成功!\n版本号:{$data['after']}\n发布内容:{$data['head_commit']['message']}\n推送者:{$data['user_name']}";
    $data = array ('msgtype' => 'text','text' => array ('content' => $message));
    $result = request_by_curl($webhook, $data, $secret);
    echo $result;
}


function request_by_curl($remote_server, $data, $secret) {

    $microtime = microtime();
    list($millisecond, $timestamp) = explode(' ', $microtime);
    $millisecond_time = sprintf('%.0f',($timestamp+$millisecond)*1000);
    $signToSign = $millisecond_time . "\n".$secret;
    $sign = hash_hmac('sha256',$signToSign,$secret,true);
    $sign = urlencode(base64_encode($sign));
    $remote_server .= "&timestamp=".$millisecond_time;
    $remote_server .= "&sign=".$sign;


    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $remote_server);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array ('Content-Type: application/json;charset=utf-8'));
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    // 线下环境不用开启curl证书验证, 未调通情况可尝试添加该代码
    curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}
本作品采用 《CC 协议》,转载必须注明作者和本文链接
Steven1998
0 人点赞
《L01 基础入门》
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
Steven1998
未填写
文章
5
粉丝
0
喜欢
4
收藏
15
排名:1657
访问:1699
私信
所有博文
社区赞助商
成为赞助商

PHP网站源码荆门模板推广通化网络营销铁岭网站排名优化公司荷坳网页制作芜湖网站优化多少钱晋中至尊标王哪家好绍兴百度关键词包年推广多少钱常德SEO按效果付费推荐成都百姓网标王推广多少钱外贸网站建设公司晋城网站设计哪家好咸阳网站推广工具公司惠州企业网站制作报价平顶山关键词按天扣费报价锦州设计网站公司无锡网站优化软件价格三明seo排名哪家好丹东网站优化推广百度网站优化排名多少钱大连网站排名优化哪家好鹰潭百度seo公司大连网络营销报价鹤岗网站优化按天扣费推荐北海关键词按天收费价格宿州企业网站制作推荐池州关键词按天计费公司宝安百度seo多少钱娄底百度网站优化排名报价永湖网站建设设计推荐怀化阿里店铺运营推荐歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化