Centos7

CentOS7安装Python3的方法CentOS7搭建L2TP服务端一键脚本CentOS7使用CertBot工具获取LetSencrypt泛域名HTTPS证书

Git

GIT删除仓库的历史提交记录脚本示例GIT进行代码量统计和贡献统计

HTTP

HTTP关于HEADER的详细解释HTTP协议对URI长度POST数据长度及COOKIE长度限制说明HTTP关于Code状态码的详细解释

JavaScript

JavaScript下的RSA对称加密DEMOJavaScript解析并遍历Excel示例代码JavaScript调用语音合成Speech Synthesis API使用ElementUI配合API数据快速渲染合并表格

Linux

Linux 信号说明列表说明Linux利用CronTab定时执行ThinkPHP命令行模式

MySQL

MySQL字符串截取MySQL腾讯云数据库导出备份到本地服务器导入MySQL设计与使用规范MySQL在5.7及以上版本中的ONLY_FULL_GROUP_BY问题处理方案

Nginx

Nginx反向代理NodeJS实现WSS协议Nginx反向代理中的Host参数传递遇到的坑Nginx配置HTTPS与HTTP2.0Nginx负载均衡的lnmp环境初始化脚本Nginx图片递归代理服务器DEMO

NodeJS

NodeJS一些冷门但实用的npm包NodeJS使用Request模块实现CURLNodeJS使用express模块无法收到phpCurl的值NodeJS使用jimp和qrcode-reader识别解析二维码NodeJS实现UDP数据报套接字通讯NodeJS实现Websocket聊天室NodeJS实现串口通讯简单例程NodeJS实现微信协议登录NodeJS实现超级方便的Git自动发布WebhookNodeJS控制台简单表格打印NodeJS转码amr到mp3NWJS配置文件

Other

C#串口通信扫码枪数据读取支付宝Schema协议列表默克尔树基础算法示例博客的升级历程

PHP

PHP下RSA对称加密超长字符串分段加密DEMOPHP下phpMyAdmin数据字典美化代码PHP下的RSA对称加解密-根证书自签与签发子证书PHP使用root权限执行系统命令和切换到www用户PHP使用独占文件指针实现阻塞少量并发PHP多进程同时处理任务示例DEMO代码PHP大文件视频上传WebUploaderPHP实现Web方式发起一个超时任务的处理请求PHP实现二叉查找树的简单代码实现PHP实现微博登录简单代码PHP微信JSSDK开发DEMOPHP的坑XML转JSONPHP简单实现QQ登录代码PHP获取URL HTTP_HOST和SERVER_NAMEPHP获取上周、本周、上月、本月、本季度、上季度时间方法PHP获取真实IP之IP代理-IP伪造-真实IPPHP解密微信小程序手机号简单DEMOPHP高精度计算常用代码

Python

Python3使用Pool进程池实现多进程并发Python3使用jieba分词并生成WordCloud词云图Python3使用request进行CURL操作Python3实现WebhookPython3使用Selenium进行自动化测试手册

Wechat

微信公众号php环境无法获取POST值微信公众号网页跳转避免出现导航栏的小技巧
NodeJS实现超级方便的Git自动发布Webhook
手机阅读

扫描二维码阅读文章
const httpPort = 12001;
var exec = require('child_process').exec;
var http = require('http');
var colors = require("colors");
var httpServer = http.createServer(function(req, res) {
    res.writeHead(200, {
        'Content-Type': 'text/plain;charset=utf-8'
    });
    if (req.method.toUpperCase() != 'POST' && req.method.toUpperCase() != 'GET') {
        res.end("Request by GET/POST only!");
        return;
    }
    switch (req.url) {
        case "/favicon.ico":
            // ignore the web icon request
            res.end();
            break;
        default:
            debug("Webhook run " + ("async").red + " --->  " + req.url);
            res.end("Webhook Success");
            exec("cd /home/wwwroot" + req.url + " && git pull", function(err, stdout, stderr) {
                if (err) {
                    console.log(stdout.red);
                    debug("Webhook error!");
                } else {
                    console.log(stdout.blue);
                    debug("Webhook success!");
                }
            });
    }
});
httpServer.listen(httpPort);
debug("Webhook start success!");

function debug(msg) {
    console.log(getTime().yellow + "\t" + msg);
}

function getTime() {
    var now = new Date();
    var hours = now.getHours();
    var minutes = now.getMinutes();
    var seconds = now.getSeconds();
    if (hours < 10) {
        hours = "0" + hours;
    }
    if (minutes < 10) {
        minutes = "0" + minutes;
    }
    if (seconds < 10) {
        seconds = "0" + seconds;
    }
    return hours + ":" + minutes + ":" + seconds;
}

环境依赖

需要安装NodeJS运行环境,同时安装PM2进程管理器对脚本进行后台守护运行。

首先安装NodeJS PM2安装

npm install -g pm2@2.10.2

这里遇到个坑,高版本的PM2死活跑起来有问题,不知道为什么,切回我常用的版本就没问题...

端口说明

可自定义访问端口,需要防火墙开启端口访问,可Nginx反向代理。

支持异步

当执行脚本的执行时间过长,可能导致http请求超时,这个脚本默认支持async异步请求方式访问。 如果需要同步操作,可调整res.end()方法的位置到执行GIT pull之前。

访问地址

http://yourip:yourPort/

开机启动

推荐将webhook加入到开机启动项,保证webhook保持在线