一分一毛也是爱

微信

微信

支付宝

支付宝

观海听潮

观海听潮博客

登录
还没有账号?去注册
观海听潮

观海听潮博客

注册
×

我的名片

网名:观海听潮

职业:PHP开发工程师

现居:山东省-青岛市

Email:1256699215@qq.com

网站统计

  • 观海听潮•博客
  • 81篇
  • 151条
  • 324056次
  • 341次
  • 未知用户

您现在的位置是:首页  > 技术杂谈  > Thinkphp  > git git

观海听潮

thinkphp6+gitee自动同步远程代码

观海听潮 2021-12-08 18:31:45 1476 0条评论
摘要
在开发阶段为了简化流程,所以需要实现本地与线上代码自动同步,当开发者提交本地代码push到远程后,线上自动拉取最新的代码,从而便于开发人员测试。

更改权限

宝塔默认执行权限为www

打开文件/etc/passwd,更改www:x:1000:1000::/home/www:/sbin/nologin

www:x:1000:1000::/home/www:/bin/bash

设置公钥

打开远程终端,执行命令:

mkdir ~/.ssh
ssh-keygen -t rsa -C "邮箱"
#连续回车,完成后
cat id_rsa.pub //查看公钥

复制公钥到gitee中的设置->SSH公钥,新增公钥,完成后在终端执行命令:

ssh -T git@gitee.com //验证公钥

设置webhook

打开仓库,选择项目,在导航栏的管理模块,点击WebHooks,新增webHook

填写url地址,在项目中新增一个post路由地址,例如:http://plat.chengzhigang.cn/gitPull

填写密码,然后点击添加。

代码实现

配置文件:config\git.php

<?php

return [
    'gitee' => [
        'password' => '123456',
    ],
    'path' => '/www/wwwroot/plat.chengzhigang.cn/'
];

路由文件:route\app.php

<?php

use think\facade\Route;
use app\service\BaseService;
use app\Request;

Route::post('gitPull',function (Request $request,BaseService $service) {
    return $service->getPull($request);
});

脚本文件:app\service\BaseService.php

<?php

namespace app\service;

class BaseService
{

    protected function response($message,$code,$data=[]){
        $data = [
            'code' => $code,
            'message' => $message,
            'data' => empty($data)?new \stdClass():$data,
            'time' => date('Y-m-d H:i:s')
        ];
        return json($data,200);
    }
    
    public function getPull($request){
        $param = $request->param();
        if (empty($param)) {
            return $this->response("参数缺失",400);
        }
        //验证密码,验证码云上配置的webhook密码
        $password = config('git.gitee.password');
        if (empty($param['password']) || $param['password'] != $password) {
            return $this->response("密码错误",400);
        }
        $path = config('git.path'); //项目存放物理路径
        //判断master分支上是否有提交
        if ($param['ref']=='refs/heads/master' && $param['total_commits_count']>0) {
            $res = shell_exec("cd {$path} && git pull --rebase origin master 2>&1");//当前为www用户
            $res_log = '------------------------->'.PHP_EOL;
            $res_log .= '用户'. $param['user_name'] . ' 于' . date('Y-m-d H:i:s') . '向' . $param['repository']['name'] . '项目的' . $param['ref'] . '分支push了' . $param['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) {
                return $this->response("拉取成功",200);
            } else {
                return $this->response("拉取失败",500);
            }
        }
        return $this->response("请求成功",200);
    }
}

补充说明

如果项目用了swoole服务的话,接口禁止使用exit或die截止函数

需要删除php禁用函数:shell_exec


讨厌 (0)
微博logo QQ空间logo QQlogo 豆瓣logo 人人logo 百度贴吧logo 有道云笔记logo

文章评论

表情表情
×
图片图片

评论列表