Сервисные зацепки Github: пост-получение через PHP

У меня возникли некоторые проблемы при развертывании через сервис-хук, и я думаю, что это вопрос разрешений, но сначала я изложу все факты.

Сервер: Nginx с PHP-FPM в Arch Linux

Nginx работает как пользователь http и владеет каталогом, который будет обновляться сценарием. Я также создал ключ SSH для HTTP и установил его на GitHub. Кажется, что другие команды прекрасно работают через shell_exec, но я не могу выполнить сброс или выгрузку, чтобы завершиться, и ни один из результатов не возвращается. Любая помощь будет оценена. Спасибо!

Скрипт Hook (PHP):

if ( isset($_SERVER["REMOTE_ADDR"]) )    { 
    $requestIP = $_SERVER["REMOTE_ADDR"]; 
} else if ( isset($_SERVER["HTTP_X_FORWARDED_FOR"]) )    { 
    $requestIP = $_SERVER["HTTP_X_FORWARDED_FOR"]; 
} else if ( isset($_SERVER["HTTP_CLIENT_IP"]) )    { 
    $requestIP = $_SERVER["HTTP_CLIENT_IP"]; 
}

// GitHub post-receive IPs
$validIPs = array(
    '207.97.227.253',
    '50.57.128.197',
    '180.171.174.178'.
    '50.57.231.61',
    '54.235.183.49',
    '54.235.183.23',
    '54.235.118.251',
    '54.235.120.57',
    '54.235.120.61',
    '54.235.120.62'
);

if(($payload = $_REQUEST['payload']) && in_array($validIps, $requestIP)) {
    $payload = json_decode($payload);
    $repository = $payload->repository->name;
    $docRoot = '/var/www/'.escapeshellcmd($repository);

    if(is_dir($docRoot)) {
        $command = 'cd '.$docRoot.' && git reset --hard HEAD && git pull';
        $output = shell_exec( $command );
        file_put_contents("hook.log", "$repository: $output\r\n", FILE_APPEND);     
    }
}

1 ответ

Решение

Вы должны проверить среду, в которой выполняются ваши команды. Возможно, git находится не на том пути, который использует среда.

Если это так, вы можете запустить git, используя его полный путь.

Другие вопросы по тегам