1

サービスフックを介したデプロイで問題が発生し、権限の問題だと思いますが、最初にすべての事実を述べます。

サーバー:ArchLinux上のPHP-FPMを使用したNginx

Nginxはユーザーhttpとして実行されており、スクリプトによって更新されるディレクトリの所有権を持っています。HTTP用のSSHキーも作成し、GitHubにインストールしました。他のコマンドはshell_execを介して正常に機能しているように見えますが、リセットまたはプルを完了させることができず、どちらからも出力が返されません。どんな助けでもいただければ幸いです。ありがとう!

フックスクリプト(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);     
    }
}
4

1 に答える 1

2

コマンドが実行されている環境を確認する必要があります。環境が使用しているパスにgitが含まれていない可能性があります。

この場合、フルパス名を使用してgitを実行できます。

于 2013-02-19T19:39:25.267 に答える