zoukankan      html  css  js  c++  java
  • php项目使用git的webhooks实现自动部署

    前言

    在项目开发中使用git进行代码的管理,每次完成更改上传代码后,还需要登录服务器将代码拉取下来.现在git服务器(gitee/gitlab/github)都会有Webhooks功能,以实现在向git仓库推送/合并等时机让服务器自动拉取新代码.

    流程说明

    使用Webhooks后,整个上传部署流程如下:

    服务器端操作

    webhook脚本创建

    关于推送的post数据格式,参考码云的《WebHook 推送数据格式说明》.根据这个参数格式编写php的脚本文件如下:

        <?php
        /**
          *git webhook 自动部署脚本
          */
        //接收post参数
        $requestBody = file_get_contents("php://input");
        if (empty($requestBody)) {
            exit('data null');
        }
        $content = json_decode($requestBody, true);
        
        //验证密码,验证码云上配置的webhook密码
        //if (empty($content['password']) || $content['password'] != 'password') //{
        //    exit('password error');
        //}
        
        $path = "/var/www/test/"; //项目存放物理路径
        //判断master分支上是否有提交
        if ($content['ref']=='refs/heads/master' && $content['total_commits_count']>0) {
            $res = shell_exec("cd {$path} && git pull origin master 2>&1");//当前为www用户
            $res_log = '------------------------->'.PHP_EOL;
            $res_log .= '用户'. $content['user_name'] . '' . date('Y-m-d H:i:s') . '' . $content['repository']['name'] . '项目的' . $content['ref'] . '分支push了' . $content['total_commits_count'] . '个commit:' . PHP_EOL;
            $res_log .= $res.PHP_EOL;
            $x = file_put_contents("git_webhook_log.txt", $res_log, FILE_APPEND);//追加写入日志文件
            if ($x) {
                echo 'true-';
            } else {
                echo 'false-';
            }
        }
        echo 'done';

    服务器用户设置

    由于是通过url请求php编写的脚本执行操作,所以打开nginx.conf文件查看执行用户,默认为www,也可在任意php文件中添加代码: echo system("whoami");,然后访问文件查看php运行用户.
    确定用户后,打开/etc/passwd文件查看该用户的信息,如下:

     www:x:1000:1000::/var/www:/bin/bash

    其格式和具体含义如下:

    用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

    其中要注意"主目录"这一项,若后续操作提示该目录不存在或错误,打开此文件修改.
    接着依次执行下面三条命令:

        su - www //切换到www用户
        ssh-keygen -t rsa -C "test@gmail.com" //以邮箱为名创建rsa密钥
        cat /var/www/.ssh/id_rsa.pub //查看rsa公钥并复制,.ssh所在目录即上面所提"主目录"

    git仓库操作

    配置部署公钥

    在码云上打开项目仓库,依次点击[管理]=>[部署公钥管理]=>[添加公钥].将上面复制的id_rsa.pub公钥添加进来.完成后在服务器上执行命令:

     ssh -T git@gitee.com

    首次使用会提示the authenticity of host 'gitee.com...需要输入yes确认并添加主机到本机SSH可信列表.若返回 Hi XXX! You've successfully authenticated, but Gitee.com does not provide shell access. 内容,则证明添加成功.添加成功后,当前账户www就可以使用SSH协议对仓库进行克隆/拉取等操作了.

    添加webhook

    在码云上打开项目仓库,依次点击[管理]=>[WebHooks]=>[添加],填写webhook的php脚本地址,如有需要填写webhook密码/密钥(密钥需要再添加验签),如下图

     到此,完成配置,之后的push操作可在码云[WebHooks 管理]中查看自动部署请求记录信息.也可查看服务器中的git_webhook_log.txt部署日志(php脚本中写入,不需要可注释掉).

    原文网站地址: https://www.zhuyilong.我爱你/tech/php_git_webhook.html

  • 相关阅读:
    [转]深入理解Java 8 Lambda(类库篇——Streams API,Collectors和并行)
    [转]深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
    JDE Develop Server分别安装DV PY PD后WEBSERVER问题
    [转]Java 8:不要再用循环了
    查找-find -grep
    长度有限制的字符串hash函数
    oracle 中proc和oci操作对缓存不同处理
    反编译.o到.cpp
    类的对象在外部访问它自己的私有成员变量没问题吗?
    strcpy(),string使用问题
  • 原文地址:https://www.cnblogs.com/zhangzhijian/p/14784340.html
Copyright © 2011-2022 走看看