WebHook之PHP实践@coding.net
次写完代码, 打开FileZilla, 把写好的文件上传到vps上, 久而久之觉得腻烦, 寻思有没有更geek的方法, 便有此文.
WebHook是跟随着Git而兴起的技术, 当你push到服务器的时候, 服务器会发送一个特殊的请求到你指定的url上, 而我们可以使用脚本语言来获取这个请求并且在vps端执行git pull来达到自动部署的目的, 老规矩先贴代码:
<?php
/**
* Simple Git WebHook SDK
*
* @coding.net
* 2016/05/09
* Author: hldh214 <hldh214@gmail.com>
*/ // 配置项 start
$git_dir = '/var/www/.git';
$work_tree = '/var/www';
// 配置项 end // 获取原始请求
$hook_log = file_get_contents('php://input');
// 使用MySQL记录log
$fh = mysqli_connect('localhost', 'root', 'root', 'git');
// 判断是否为WebHook请求
if (!empty($hook_log)) {
// 是WebHook请求, 并decode数据
$json = json_decode($hook_log, true);
if (array_key_exists('ref', $json)) {
// 检测到ref键, 执行pull
$cmd = "/usr/bin/sudo git --git-dir=$git_dir --work-tree=$work_tree pull 2>&1";
$sh_log = shell_exec($cmd);
$sql = "INSERT INTO `webhook_log` (`hook_log`, `sh_log`, `date`) VALUES ('" . $hook_log . "', '" . $sh_log . "', CURRENT_DATE());";
// 记录执行log
$result = mysqli_query($fh, $sql);
} else {
// 未检测到ref键, 为测试请求
$sh_log = 'testing';
$sql = "INSERT INTO `webhook_log` (`hook_log`, `sh_log`, `date`) VALUES ('" . $hook_log . "', '" . $sh_log . "', CURRENT_DATE());";
$result = mysqli_query($fh, $sql);
}
} else {
// 正常访问
echo '<h1>normal view~</h1>';
把这段代码用FileZilla上传到vps上(最后一次使用FileZilla了<3), 把指向这个PHP文件的url填写到WebHook页面的deploy_url里面, 并且点击测试, 之后回到vps上查看MySQL是否已经有log, 再在开发机试试commit&push, 你会发现, 代码已经悄然部署到vps上了.
WebHook之PHP实践@coding.net的更多相关文章
- CODING 代码多仓库实践
关于代码的管理问题已经讨论多年,随着企业业务的复杂度提高.软件行业技术栈的选择度变宽泛,现代软件的代码仓库也变得越来越庞大和复杂.一个中型项目,将测试代码.核心业务代码.编译构建.部署打包等基础设施的 ...
- CODING 携手优普丰,道器合璧打造敏捷最佳实践
随着全球进入到信息化时代,越来越多的企业迫切地寻求新的商业模式,要求迭代.探索.不断加速创新以响应快速变化的市场.如今一系列新兴概念如敏捷开发.极限编程.微服务.自动化.DevOps 等大行其道,然而 ...
- coding.net------WEBHOOK自动部署实战
使用WebHook自动部署项目今天在laravist.com看到了这个 Webhook 自动部署Git项目 这个教学视频,以前自己也想做这样做一个利用Git WebHook的自动化部署,但总是不成功, ...
- ZABBIX新功能系列1-使用Webhook将告警主动推送至第三方系统
Zabbix5以来的新版本与以前的版本除UI界面变化较大外,在很多功能上也有许多亮点,我这里计划安排1个系列来和大家交流一些新功能的使用,这是第一篇:使用Webhook将告警主动推送至第三方系统. 首 ...
- 深度学习中的Data Augmentation方法(转)基于keras
在深度学习中,当数据量不够大时候,常常采用下面4中方法: 1. 人工增加训练集的大小. 通过平移, 翻转, 加噪声等方法从已有数据中创造出一批"新"的数据.也就是Data Augm ...
- 【深度学习系列】CNN模型的可视化
前面几篇文章讲到了卷积神经网络CNN,但是对于它在每一层提取到的特征以及训练的过程可能还是不太明白,所以这节主要通过模型的可视化来神经网络在每一层中是如何训练的.我们知道,神经网络本身包含了一系列特征 ...
- Elastic数据迁移方法及注意事项
需求 ES集群Cluster_A里的数据(某个索引或某几个索引),需要迁移到另外一个ES集群Cluster_B中. 环境 Linux:Centos7 / Centos6.5/ Centos6.4Ela ...
- 【第一周】第一周工作统计(psp)
项目:词频统计 项目类型:个人项目 项目完成情况:已完成 项目改进:未变更 项目日期:2016.9.3-2016.9.4 3号 类别c 内容c 开始时间s 结束e 中断I 净时间T 项目实践 构思 ...
- python-爬虫之urllib模块
urllib是python的一个获取url(Uniform Resource Locators,统一资源定址器)了,我们可以利用它来抓取远程的数据进行保存哦 1.基本方法 urllib.request ...
随机推荐
- python-建造者模式
源码地址:https://github.com/weilanhanf/PythonDesignPatterns 说明: 假如要组装一台电脑,将主板,CPU,内存等部件按照某个稳定的步骤组合,基本过程是 ...
- js 动态声明变量
var object = {}; for(var i=0; i<5; i++){ object['attr'+i] = i; }
- html垂直居中
参考于http://www.cnblogs.com/yugege/p/5246652.html <!DOCTYPE html> <html lang="en"&g ...
- terminate called after throwing an instance of 'std::bad_alloc'
这个错误,网上搜索到的资料大多是指向内存不足或者内存碎片问题,如下链接 http://bbs.csdn.net/topics/330000462 http://stackoverflow.com/qu ...
- paste 命令
Linux paste命令用于合并文件的列. paste指令会把每个文件以列对列的方式,一列列地加以合并. 语法: paste [-s][-d <间隔字符>][--help][--vers ...
- Swagger使用教程 SwashbuckleEx
一.前言 自从之前写了一篇<Webapi文档描述-swagger优化>这篇文章后,欠了大家一篇使用文档的说明,现在给大家补上哈. 二.环境 .Net Framework 4.5 WebAp ...
- JSON教程基础
一.基础简介 二.JSON 语法 三.JSON 使用 一.基础简介 1.JSON:JavaScript 对象表示法(JavaScript Object Notation). JSON 是存储和交换文本 ...
- tomcat catalina.out日志切割(logrotate)
简单说明: 1,因为tomcat日志会一直往catalina.out里面输出,所以回到值catalina.out非常大,占用磁盘空间 2,日志非常大,查看日志就需要很长时间. 3,据说catalina ...
- JSONCPP to Visual Studio
I am having some trouble getting the JSONCPP Library into Visual Studio. I have downloaded the libra ...
- Java学习---面试基础知识点总结
Java中sleep和wait的区别 ① 这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类. sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线 ...