zoukankan      html  css  js  c++  java
  • 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。

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

     

  • 相关阅读:
    AcWing 1027. 方格取数 dp
    AcWing 1014. 登山 dp
    acwing 482. 合唱队形 dp
    LeetCode 1463. 摘樱桃II dp
    LeetCode 100. 相同的树 树的遍历
    LeetCode 336. 回文对 哈希
    LeetCode 815. 公交路线 最短路 哈希
    算法问题实战策略 DARPA大挑战 二分
    算法问题实战策略 LUNCHBOX 贪心
    AcWing 1100. 抓住那头牛 BFS
  • 原文地址:https://www.cnblogs.com/mengyilingjian/p/11699836.html
Copyright © 2011-2022 走看看