码云WebHooks代码同步更新到服务器

步骤一:项目=》管理=》WebHooks

码云WebHooks代码同步更新到服务器_第1张图片




步骤二:设置服务器推送地址,码云给出的文档链接http://git.mydoc.io/?t=154711,简单看下就好

码云WebHooks代码同步更新到服务器_第2张图片

码云上的操作到此结束

步骤三:我参考了这篇博客,

 nginx、php-fpm以及mysql运行在各个用户下的配置

先讲下原理性的东西,再进行步骤四。

我环境用的是nginx + php-fpm ,浏览器发送过来的请求会先经过nginx处理,但是php文件还是交由php-fpm来执行的,xshell下执行 "ps aux|grep php-fpm" 。不出意外的话你的php-fpm由linux 的nobody用户 执行,具体百度 "linxu nobody"关键字。nobody这货不能登录,不能用它去执行git一系列操作。所以,我们来到了步骤四


步骤四: linux下新建用户,我的叫"wim"然后 修改下php-fpm的所属用户

去找你php-fpm的配置文件,看图


好的,去修改php-fpm所属用户吧

码云WebHooks代码同步更新到服务器_第3张图片

修改完保存,然后重启php-fpm。执行命令 "/etc/init.d/php-fpm restart"


步骤五:修改你项目所属用户为 php-fpm所属用户,设置项目权限为775吧。


步骤六:你可以用git公钥配对,ssh提交。我使用https提交,所以设置用户名和email

git config user.name xxx

git config user.email [email protected]

然后再执行一下永久存储的命令,用来存储密码

git config --global credential.helper store

切换linux用户

su wim

然后去进行一次pull操作,输入密码登录就好了



步骤七: 好了,php-fpm 无法执行git命令的坑解决了,我们可以愉快的写webhooks接口代码了,附上我的代码,很简单,因为我很菜,git不熟哈哈。

php代码如下:

namespace app\index\controller;
use think\Request;
class Hooks {
    ////
    ////////
    public function hook(){
        $request = Request::instance();
        $params = $request->param();

        $pwd = $params['password'];

        if($pwd == 'mingooo123'){
            $command = '/data0/qa/update.sh';
            exec($command,$output);
            return jsonReturn(200,'远程更新成功',$output);
        }else{
            return jsonReturn(500,'更新失败',[]);
        }
    }
}

shell 代码如下

#!/bin/bash

cd /data0/qa
git fetch --all
git reset --hard origin/master
git pull https://gitee.com/xinzhibang/qa.git master

总结:坑主要为php-fpm所属用户为nobody,nobody无法执行git命令。

本文章参考了:

1、 nginx、php-fpm以及mysql运行在各个用户下的配置

你可能感兴趣的:(运维)