Github-Vorbereitungen
1. Fügen Sie Webhooks in den Warehouse-Einstellungen hinzu
Nehmen Sie ein privates Warehouse als Beispiel:
1 Klicken Sie nach dem Erstellen des Warehouse auf Einstellungen.
Webhooks-Zugriffspfad festlegen:
Nehmen Sie mein eigenes Projekt als Beispiel, das Framework verwendet tp6. Erstellen Sie unter public/ eine Datei mit dem Namen „basic.php“. Dabei handelt es sich um eine Datei, auf die GitHub zugreifen und die sie ausführen kann, wenn der Code an den Server übertragen wird.
Diese Datei wird zum Ausführen von Shell-Befehlen verwendet. Wenn der Link ausgelöst wird, werden die Befehle in der Datei automatisch ausgeführt, wodurch ein automatischer Git-Pull realisiert wird.
2. Testen Sie, ob der Link gültig ist und ob auf die Datei zugegriffen wurde.
Wie im Bild oben gezeigt, bedeutet es, dass auf den Link zugegriffen wurde, und wenn ein rotes ⚠️ erscheint erscheint, bedeutet dies, dass auf die Datei nicht zugegriffen wurde. Verwenden Sie dies, um zu überprüfen, ob ein Linkproblem oder ein Codeproblem vorliegt.
-
[x] Github ist jetzt fertig.
PHP-Code-Bereitstellung
1. Hook-Datei hinzufügen und Shell-Befehl ausführen
Einige werden unten gezeigt
内联代码片
.
<?php //git webhook 自动部署脚本 $requestBody = file_get_contents("php://input"); //接收数据 if (empty($requestBody)) { //判断数据是不是空 die('send fail'); } $content = json_decode($requestBody, true); //数据转换 //若是主分支且提交数大于0 if ($content['ref']=='refs/heads/main') { //或将命令加入 shell里,看个人需求 git reset --hard origin/master && git clean -f $res = shell_exec('cd /www/wwwroot/xxxx/ && echo `sudo git pull` >> b.log');//PHP函数执行git命令 $res_log = '-------------------------'.PHP_EOL; $res_log .= ' 在' . date('Y-m-d H:i:s') . '向' . $content['repository']['name'] . '项目的' . $content['ref'] . '分支push'.$res; file_put_contents("git-webhook.txt", $res_log, FILE_APPEND);//将每次拉取信息追加写入到日志里 } ?>
Nach dem Login kopieren
-
[x] Zu diesem Zeitpunkt ist der PHP-Shell-Teil des Befehls abgeschlossen und kann je nach Projektanforderungen debuggt werden.
Häufige Fehlerbehandlung
1. Die Shell ist in der .php.ini-Datei nicht deaktiviert. Dieser Fehler kommt relativ häufig vor und ist beim Debuggen leicht zu finden, daher werde ich nicht auf Details eingehen.
Methode: Shell_exec in php.ini löschen und den Dienst neu starten.
2. .git-Berechtigungsproblem, ändern Sie die Dateiberechtigungsgruppe im .git/-Verzeichnis in www
Im Allgemeinen wird es nicht angezeigt. Wenn ein Berechtigungsfehler auftritt, wird empfohlen, zunächst zu überprüfen, ob das Dateiverzeichnis die Berechtigungsgruppe ist Wenn nicht, können Sie den folgenden Befehl verwenden, um das Problem der Dateiberechtigungsgruppe zu ändern: Schritt für Schritt, wenn festgestellt wird, dass kein Problem mit dem vorherigen Prozess vorliegt und der Code vorhanden ist Wird die obige Shell immer noch nicht automatisch abgerufen, kann das Shell-Problem behoben werden. Öffnen Sie den Protokolldatensatz. Wenn der Inhalt des Protokolldatensatzes leer ist, können Sie versuchen, die alte Version durch die neue Version zu ersetzen. 4. Ein Fehler ähnlich der Host-Schlüsselüberprüfung ist fehlgeschlagen.^M Schwerwiegend: Vom Remote-Repräsentanten konnte nicht gelesen werden. .. ...
Das liegt daran, dass es ein Problem mit dem Berechtigungsschlüssel gibt, der nicht in der WWW-Berechtigungsgruppe erstellt wird.
Der Autor hier verwendet diese Methode, um das Problem zu lösen. Bitte zögern Sie nicht, eine private Nachricht oder eine Nachricht im Kommentarbereich zu senden. vim Öffnen Sie /etc/sudoers. Fügen Sie eine Zeile www unter root hinzu, um Sudo-Berechtigungen ohne Passwort auszuführen.
5. Fertig, jetzt kann Ihr Webhook funktionieren, die Datei ändern und übermitteln und das Protokoll abfragen.
Lokale Umgebung Centos + PHP7.3 + Nginx