Gitee 部署 WebHook

webhook 是一个网络钩子吧,当我们操作git时会触发这个钩子,这个钩子就会向指定URL请求。

因为权限问题,捣鼓了半天才弄成功。

1、先建立处理请求的文件

/var/www/example/webhome/sw.php

<?php
// 此处action是留给自己手动测试使用的,passwd是在gitee仓库里面设置的webhook密码
$action = 'blue';
$passwd = '123456';
$goPass = isset($_SERVER['HTTP_X_GITEE_TOKEN']) && $_SERVER['HTTP_X_GITEE_TOKEN'] == $passwd;
if ($goPass || isset($_GET[$action])) {
    shell_exec("cd /var/www/example/sw && git pull origin master");
}

2、建立好这个文件后,返回到项目目录给钩子777权限(一开始不成功,我以为是没有执行权限,不管那么多,先给了再说)

chmod -R 777 webhome

3.给sw目录777权限

chmod -R 777 sw

4.建立仓库,并关联远程仓库(这里只是做关联操作,如果拉取远程仓库后,所创建的文件是属于当前登录的用户的,那么就会导致执行钩子的时候,不是同一个用户而失败。如果你非要拉取,那么拉取线上后 把所有文件的所有者都修改成运行git的那个用户,我这边运行git的用户是apache,执行chown apache:apache -R sw)

备注:其中特别需要注意的是文件及目录的权限(确保有写入,执行权限),还有就是本地仓库的文件 所有者,如果执行git命令时,所有者不同也就可能没有权限,会导致git pull失败。


更新于 2021/06/01 14:59:00

以下是我部署静态页面时使用的

<?php

// 先登录服务器建立文件夹,并把这个文件夹所有者和组修改成```shell_exec("whoami")```用户
$config = [
    'posts'=>[
        'path'=>__DIR__ . '/../example',
        'repo'=>'https://gitee.com/username/example.git',
        'branch'=>'master',
    ],
];

$action = $_GET['action'] ?? 'posts';

if (in_array($action, array_keys($config))) {
    $conf = $config[$action];
    if (is_dir($conf['path'] . '/.git')) {
        shell_exec(sprintf("cd %s && git pull origin %s", $conf['path'], $conf['branch']));
    } else {
        shell_exec(sprintf("cd %s && git init && git remote add origin %s && git pull origin %s", $conf['path'], $conf['repo'], $conf['branch']));
    }
}