/ / Github Service Hooks: Post-Empfang über PHP - PHP, Git, GitHub, Nginx, Git-Post-Empfang

Github Service Hooks: Post-Empfang über PHP - PHP, Git, GitHub, Nginx, Git-Post-Empfang

Ich habe Probleme bei der Bereitstellung über Service-Hook und ich denke, es ist eine Frage der Berechtigungen, aber ich werde alle Fakten zuerst angeben.

Server: Nginx mit PHP-FPM auf Arch Linux

Nginx läuft als Benutzer http und hat Besitzrechtedes Verzeichnisses, das vom Skript aktualisiert werden soll. Ich habe auch einen SSH-Schlüssel für HTTP erstellt und auf GitHub installiert. Andere Befehle scheinen gut durch die Shell_exec zu funktionieren, aber ich kann kein Zurücksetzen oder ein Ziehen zum Abschluss bekommen, und es gibt keine Ausgabe von beiden zurückgegeben. Jede Hilfe würde geschätzt werden.

Hook-Skript (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: $outputrn", FILE_APPEND);
}
}

Antworten:

2 für die Antwort № 1

Sie sollten die Umgebung überprüfen, in der Ihre Befehle ausgeführt werden. Es ist möglich, dass sich git nicht in dem Pfad befindet, den die Umgebung verwendet.

Wenn dies der Fall ist, können Sie git mit dem vollständigen Pfadnamen ausführen.