• github hooks 配置教程 钩子搭建(实测通过,手把手教程)


    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 = "
     -------------------------".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。

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

     

  • 相关阅读:
    .NET Core 使用Dapper 操作MySQL
    .NET Core HtmlAgilityPack HTML解析利器
    ASP.NET Core 开发-缓存(Caching)
    .NET Core 调用WCF 服务
    ASP.NET Core 开发-Logging 使用NLog 写日志文件
    Qt动态生成界面并通过拉姆达获取其返回值
    Qt启动C++线程并在线程中修改界面
    Vector求最大值最小值
    C/C++取消结构体字节对齐
    Matlab定时器
  • 原文地址:https://www.cnblogs.com/mengyilingjian/p/11699836.html
Copyright © 2020-2023  润新知