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. 分布式事务一2PC

    分布式事务解决方案之2PC(两阶段提交) 前面已经学习了分布式事务的基础理论,以理论为基础,针对不同的分布式场景业界常见的解决方案有2PC.TCC.可靠消息最终一致性.最大努力通知这几种. 3.1.什 ...

  2. 【转】京东金融App端链路服务端全链路压测策略

    京东金融移动端全链路压测历时三个月,测试和服务端同学经过无数日日夜夜,通宵达旦,终于完成了移动端链路的测试任务.整个测试有部分涉及到公司敏感数据,本文只对策略部分进行论述. 1.系统架构与策略 在聊性 ...

  3. 创建Observable序列

    1. just()方法 该方法通过传入一个默认值来初始化 下面样例我们显示地标注出了observable的类型为Observable, 即指定了这个Observable所发出的事件携带的数据类型必须是 ...

  4. 使用java计算数组方差和标准差

    使用java计算数组方差和标准差 觉得有用的话,欢迎一起讨论相互学习~Follow Me 首先给出方差和标准差的计算公式 代码 public class Cal_sta { double Sum(do ...

  5. iOS App转让、转移、迁移(App transfer) -- 仅需四步

    当需要将某个 App 出售给其他开发人员,或想要将其移至其他 App Store Connect 组织,则您需要转让该 App.您无需将 App 从 App Store 下架,即可将其所有权转让给另一 ...

  6. table 随td固宽

    //给table,td定最小宽度 table.sheetbody{table-layout: %;} td,th{ min-width: 100px; } <table border=" ...

  7. iOS - NSURLConnection finished with error - code -1002

    网络请求会异常,比如报错:Error domain: 在回调的地方打一个断点,然后用命令行查看下什么错误: po error 当错误是:**[Error Domain=NSURLErrorDomain ...

  8. FFmpeg 的bug

    发现一个ffmpeg 的bug, 我用老版本的ffmpeg解码播视频,对同样的视频,音频部分得到的是6通道,一直有杂音 周末呢换了新版本的ffmpeg4.2的库,得到是4,6,8三个通道在切换,我修改 ...

  9. Django Model 模型

    参考: https://www.runoob.com/django/django-model.html https://www.cnblogs.com/taosiyu/p/11260000.html ...

  10. Android最新版本号与API级别对应关系

     Android版本号与API级别对应关系表 名称 版本号 API等级 发布时间 BuildVersion 2012-11-01 BuildVersionCodes.JellyBeanMr1 Jell ...