tips:如果本文对你有用,请爱心点个赞,提高排名,让这篇文章帮助更多的人。谢谢大家!❤

本人hooks搭建成功,全程参考JellyBool老师的视频教程,有不懂的可以先去看下这个视频,跟着操作。本文主要是以文档形式,教大家搭建git hooks.视频地址:https://www.codecasts.com/series/use-git-in-your-own-way/episodes/215

hooks搭建成功后,很方便,可以在本地直接推送代码到远程服务器端。实现实时推送的功能。

如果解决不了,可以在文末进群交流。

1.在github上创建仓库,并把服务器的代码推送到该仓库。

2.在linux中使用命令 ps -ef | grep php,查看执行php程序的用户。我的是nginx,执行用户是www用户。

3.使用命令:sudo ssh-kengen -t rsa -C "your_github_email"生成密钥,如果你不是root用户,会提示要求输入执行命令的用户密码。直接输入即可。我已经生成完毕,所以往下的我就不再截图做演示。下面的步骤都是直接回车,成功后有生成sshkey的路径,然后根据这个路径找到id_rsa.pub文件,并将文件内的内容,配置到github的公钥中。

4.分别执行以下两条命令配置github:

git config --global user.name "eric-zhou"

git config --global user.email "mengyilingjian@outlook.com"

5.执行命令 sudo -Hu www ssh-keygen -t rsa ,生成deploy-key。和第三步一样,将生成的id_rsa.pub文件内容,添加到项目中的webhooks选项 deploy keys中。

6.将服务器上的代码删除,使用命令 sudo -Hu www git clone git@github.com:eric-zhou/project.git ,重新克隆一份到服务器上。并在仓库中创建一个deploy.php.代码内容如下。这个php文件假设直接访问路径为是 https://abc.vyuan8.cn/vyuan/deploy.php

<?php

class Deployment {

	public $serect = 'mengling@1234333'; //webhooks中配置的密钥

	public function deploy()
{
$requestBody = file_get_contents('php://input'); //每次推送的时候,会接收到post过来的数据。
$payload = json_decode($requestBody, true); //将数据转成数组,方便取值。
if(empty($payload)){
//写日志
$this->write_log('send fail from github is empty');exit;
}else{
//获取github推送代码时经过哈希加密密钥的值
$signature = $_SERVER['HTTP_X_HUB_SIGNATURE'];
} if (strlen($signature) > 8 && $this->isFromGithub($requestBody,$signature)) {
//验证密钥是否正确,如果正确执行命令。
$res = shell_exec("cd /alidata/www/phpwind/project &&
git pull 2>&1");
$res_log = "\n -------------------------".PHP_EOL;
$res_log .= '['.$payload['commits'][0]['author']['name'] . ']' . '向[' . $payload['repository']['name'] . ']项目的' . $payload['ref'] . '分支'.$_SERVER['X-GitHub-Event'].'了代码。commit信息是:'.$payload['commits']['message'].'。详细信息如下:' . PHP_EOL;
$res_log .= $res.PHP_EOL;
http_response_code(200);
$this->write_log($res_log);
}else{
$this->write_log('git 提交失败!');
abort(403);
}
} public function isFromGithub($payload,$signature)
{
//$hash是github的密钥。然后与本地的密钥做对比。
list($algo, $hash) = explode("=", $signature, 2);
return $hash === hash_hmac($algo, $payload, $this->serect);
} public function write_log($data)
{
// 此处加载日志类,用来记录git push信息,可以自行写。
}
} $deploy = new Deployment(); if($_SERVER['REQUEST_METHOD'] == 'POST'){
//触发此代码的时候,git是以post方式触发
$signature = $deploy->deploy();
}

7.配置webhooks。如下图:

secret是用来校验的一个密钥。可以自行设置。设置成功后,这个密钥要和deploy.php中的secret变量一样。具体不懂的,可以参考jellybool老师的视频,很详细。

8.使用git clone命令,在本地将仓库的代码克隆下来。然后使用git bash直接开始使用git  push文件,就可以同步到服务器上了。

9.基本流程说明: 就是在本地使用git推送到仓库的时候,git会通过post的方式,请求设定的webhooks地址 https://abc.vyuan8.cn/vyuan/deploy.php。触发这个地址后,便执行php中的代码程序。

程序中先获取post过来的body数据,这个数据是json格式,转成数组后,可以拿到X-Hub-Signature这个值,然后用这个值和php中设定好的secret变量做哈希加密,进行对比。如果相等,则通过exce_shell函数执行git pull的动作。

post过来的数据,可以在git webhooks页面中看到。

10.本人实测效果如下

push前

 、

push后:

刷新网页:

日志记录信息:

以上代码本人亲自测试,如果还是不会请先看视频,然后再进群提问。群二维码如果过期,可加我微信:mengyilingjian。

如果成功了,请点个赞,谢谢~

 

github hooks 配置教程 钩子搭建(实测通过,手把手教程)的更多相关文章

  1. Chevereto免费图床搭建教程 | vps搭建免费图床教程

    Chevereto免费图床搭建教程 | vps搭建免费图床教程 本文首发于:https://chens.life/How-to-build-a-free-image-bed.html 前言 自从有了个 ...

  2. VPS教程:搭建个人网盘教程—kodexplorer

    kodexplorer网盘系统.Kodexplorer,也叫芒果云.可道云.kodcloud,总之名字改了不少.但其本身作为一个网盘文件系统,还是有很多可圈可点的地方. seafile.h5ai.ko ...

  3. 可能是最详细的 Hexo + GitHub Pages 搭建博客的教程

    前言:博主目前大三,Web 前端爱好者.写博客的好处,不是为了写而写,而是一个记录思想的过程.不要考虑它能带给你什么,而是你自己从中收获了什么. 最近刚好有空,于是就参照网上的各种教程,搭建了一个博客 ...

  4. GitHub笔记(五)——忽略文件、配置别名、搭建服务器

    六.忽略文件 忽略某些文件时,需要编写.gitignore: .gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理! 忽略文件的原则是: 忽略操作系统自动生成的文件,比 ...

  5. GitHub+Hexo 搭建个人网站详细教程

    原文链接 GitHub+Hexo 搭建个人网站详细教程 前言: 随着互联网浪潮的翻腾,国内外涌现出越来越多优秀的社交网站让用户分享信息更加便捷.然后,如果你是一个不甘寂寞的程序猿(媛),是否也想要搭建 ...

  6. kubernetes(K8S)快速安装与配置集群搭建图文教程

    kubernetes(K8S)快速安装与配置集群搭建图文教程 作者: admin 分类: K8S 发布时间: 2018-09-16 12:20 Kubernetes是什么? 首先,它是一个全新的基于容 ...

  7. GitHub搭建个人网站详细教程

    GitHub搭建个人网站详细教程: http://blog.csdn.net/gane_cheng/article/details/52203759

  8. github page 配置hexo 博客 的常见错误

    缘起 最近看到好多的公众号作者推荐大家搭建自己的博客,自己手痒也搭建了一个个人博客lumang,具体过程就是一开始上网搜索一番教程,按照教程开始搭建,由于是windows的环境,同时教程也有很多的老旧 ...

  9. 一步一步使用ABP框架搭建正式项目系列教程之本地化详解

    返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 本篇目录 扯扯本地化 ABP中的本地化 小结 扯扯本地化 本节来说说本地化,也有叫国际化.全球化的,不管怎么个叫法,反正道理都是一 ...

随机推荐

  1. PHP商品秒杀问题解决方案实例详解【mysql与redis】

    本文实例讲述了PHP商品秒杀问题解决方案.分享给大家供大家参考,具体如下: 引言 假设num是存储在数据库中的字段,保存了被秒杀产品的剩余数量. if($num > 0){ //用户抢购成功,记 ...

  2. Qt编写安防视频监控系统16-设备播放

    一.前言 设备播放模块是后面增加的,核心就是通过组合rtsp视频流地址来播放实时视频和历史视频,目前市面上很多厂家比如排第一的海康都是支持直接rtsp通过NVR来播放某个通道视频流和回放某个通道的视频 ...

  3. Laya一个莫名其妙的报错laya.pathfinding

    版本2.2.0 莫名其妙,然后论坛查了下 把类库设置,不勾选这玩意就不报错了.

  4. MOP tricks

    MOP tricks 开新坑,未完待续 觉得有用的话,欢迎一起讨论相互学习~Follow Me Reference [1] Multiobjective Immune Algorithm with N ...

  5. blade-boot操作之Idea使用Mave和Dockerfile文件推送到harbor仓库

    mvn clean package docker:build 错误提示: Failed to execute goal com.spotify:docker-maven-plugin:1.1.0:bu ...

  6. Spring BeanFactory 初始化 和 Bean 生命周期

    (version:spring-context-4.3.15.RELEASE) AbstractApplicationContext#refresh() public void refresh() t ...

  7. Doker容器部署Tomcat服务器

    1.拉取tomcat服务镜像文件 root@ubuntu:~# docker pull registry.cn-hangzhou.aliyuncs.com/xxxx/xxxxx:web web: Pu ...

  8. phpspreadsheet 中文文档(一) 访问单元格

    2019年10月11日11:45:09 访问单元格 访问电子表格中的单元格应该非常简单.本主题列出了一些访问单元的选项. 通过坐标设置单元格值 可以使用工作表的setCellValue()方法来按坐标 ...

  9. FLINK-11738

    caused by: akka.pattern.asktimeoutexception: ask timed out on flink Caused by: akka.pattern.AskTimeo ...

  10. CentOS 7.5 使用 yum 安装 Kubernetes 集群(二)

    一.安装方式介绍 1.yum 安装 目前CentOS官方已经把Kubernetes源放入到自己的默认 extras 仓库里面,使用 yum 安装,好处是简单,坏处也很明显,需要官方更新 yum 源才能 ...