Git-Abruf aus PHP-Datei unter Verwendung privater Schlüssel

Beitrag von Juli 2024 aus dem Bereich Coding von Arthur Weder

Um ein Git-Pull aus einer PHP-Datei zu automatisieren, wird ein privater SSH-Schlüssel erstellt und im GitHub-Repository hinterlegt. Dabei ist sicherzustellen, dass ausführbare Dateien wie ssh-add, git und ssh-agent über absolute Pfade erreichbar sind. Anschließend wird ein PHP-Skript konfiguriert, das die Git-Konfiguration temporär anpasst, das Repository klont und den Inhalt in einen Zielordner verschiebt – ein einfacher und effizienter Ansatz für serverseitige Automatisierungen.

Git-Abruf aus PHP-Datei unter Verwendung privater Schlüssel

Für die Automatisierung eines Git-Pulls aus einer PHP-Datei ist ein strukturierter Ansatz erforderlich: Zunächst wird ein privater SSH-Schlüssel generiert, der im Ziel-Repository hinterlegt wird, um den Zugriff zu ermöglichen. Dies erfolgt über den Befehl ssh -T [email protected] -i id_autossh_a_b, wobei der Schlüssel im Repository unter Einstellungen > Deploy Keys eingetragen werden muss.

> ssh -T [email protected] -i id_autossh_a_b
> key eintragen: https://github.com/{git_username}/{repositorie_name}/settings/keys

Um sicherzustellen, dass die benötigten ausführbaren Dateie (git,) korrekt aufgerufen wird, muss der absolute Pfad über den Befehl whereis ermittelt und verwendet werden.

> whereis git  -> /usr/local/bin/git

Ich habe ein PHP-Skript erstellt, dass einen Git-Pull in einen bestimmten Ordner durchführt:

index.php:

<?php
$name_of_process = 'autossh_a_b';
$remotePath =   '{git_username}/{repositorie_name}.git';
$localPath = __DIR__.'/files/tmp'; // reqeuired second directiry  (z.B _tmp)
$git_name = 'git';
$git_email = 'test@server';
$privateKey = '~/.ssh/id_'.$name_of_process; //id_test
$commands = array();
$commands[] = "rm -r -f $localPath";
$commands[] = '/usr/local/bin/git config --global core.sshCommand \'ssh -i '.$privateKey.'\'';
$commands[] = '/usr/local/bin/git config --global user.name "'.$git_name.'"';
$commands[] = '/usr/local/bin/git config --global user.email "'.$git_email.'"';
$commands[] = "/usr/local/bin/git clone [email protected]:$remotePath $localPath";
$commands[] = '/usr/local/bin/git config --global --unset user.name';
$commands[] = '/usr/local/bin/git config --global --unset user.email';
$commands[] = '/usr/local/bin/git config --global --unset user.email';
$commands[] = "cd $localPath && mv * .. && rm -r $localPath";
echo implode("<br>",$commands);
echo '<hr>';
foreach($commands as $command){
    $output = shell_exec("$command 2>&1");
    echo "<pre>$output</pre>";
}

Der untere Teil:

echo implode("<br>",$commands);
echo '<hr>';
foreach($commands as $command){
    $output = shell_exec("$command 2>&1");
    echo "<pre>$output</pre>";
}

..kann natürlich ersetzt werden sobald es erfolgreich durchläuft mit:

shell_exec(implode(" && ",$commands));

Viel Spass!

Passende Beiträge aus dem Bereich Coding

So übertragen Sie Ihr Webhosting Schritt für Schritt

So übertragen Sie Ihr Webhosting Schritt für Schritt

Sie möchten den Hosting-Anbieter wechseln, wissen aber nicht, wie es am schnellsten gehen soll? Dann sind Sie hier rich...

Ajax reqeust hangs verhindern mittles PHP

Ajax reqeust hangs verhindern mittles PHP

Werden über Ajax mehrere Anfragen gleichzeitig gesendet, verhindert die Initialisierung der Session die parallele Verar...