So implementieren Sie eine Bereitstellung von GitHub auf einem Produktionsserver mithilfe von Webhook



Ich habe lange die Gewohnheit, Repositories auf GitHub zu erstellen. Dies ist viel effektiver, als alles auf Google Drive oder, schlimmer noch, auf Ihrer Festplatte zu speichern. Hier stellt sich jedoch sofort die Frage: Wie wird auf einem funktionierenden Server bereitgestellt?

Die meisten Suchanfragen brachten mich zu Jenkins und anderen Tools für die kontinuierliche Bereitstellung. Aber ich wollte eine andere Lösung finden. Also ging ich zum kostenlosen Webhook-Service.

Skillbox empfiehlt: Praktikum "Mobile Developer PRO" .

Wir erinnern Sie daran: Für alle Leser von „Habr“ - ein Rabatt von 10.000 Rubel bei der Anmeldung für einen Skillbox-Kurs mit dem Promo-Code „Habr“.

Die technische Basis von Webhook ist das frische Digital Ocean-Tröpfchen mit Ubuntu 16.04 als Produktionsserver. Um die Anzahl der zur Implementierung des Plans erforderlichen Schritte zu verringern, werden alle Aktionen vom Root-Benutzer ausgeführt.

Beginnen wir mit Github


Wenn Sie ein Repository haben und es verwenden möchten, können Sie diesen Schritt überspringen - verwenden Sie einfach den SSH-URI, und fertig. Wenn nicht, erstellen Sie eine und verwenden Sie auch den SSH-URI.



Installieren Sie Go und Webhook (Digital Ocean Droplet).

Bevor Sie beginnen, lohnt es sich, ein kurzes Update und Upgrade mit dem neuen Ubuntu 16.04-Installationsprogramm durchzuführen.

sudo apt update -y && sudo apt upgrade -y 

Um WebHook zu installieren, müssen Sie jetzt die Programmiersprache Go installieren. Zum Zeitpunkt dieses Schreibens war Version 1.11.4 relevant. Wenn Sie also eine andere Version haben, müssen Sie Änderungen vornehmen.

 wget https://dl.google.com/go/go1.11.4.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.11.4.linux-amd64.tar.gz export PATH=$PATH:/usr/local/go/bin 

Es ist Zeit, die neueste Version von Webhook herunterzuladen.

 go get github.com/adnanh/webhook 

Während des Downloads gibt es keinen Fortschrittsbalken, Sie müssen also nur warten. Führen Sie nach Abschluss des Vorgangs ~ / go / bin / webhook aus.

Webhook ist installiert, aber Sie müssen ein Verzeichnis und eine Dateistruktur erstellen, damit alles ordnungsgemäß funktioniert.

 mkdir ~/webhooks mkdir ~/webhooks/deployment-tutorial touch ~/webhooks/hooks.json touch ~/webhooks/deployment-tutorial/deploy.sh chmod +x ~/webhooks/deployment-tutorial/deploy.sh 

Die Datei hooks.json ist für die Konfiguration und das Routing verantwortlich. Deploy.sh dient als Tool zum Ausführen der Befehle, die für das Upgrade von GitHub erforderlich sind.

Der erste Schritt besteht darin, hooks.json durch Öffnen in einem Texteditor zu konfigurieren. Die Datei enthält die Konfiguration für die Endpunkte, die nach dem Start von Webhook erstellt werden, und besteht aus einer Reihe von Objekten, von denen jedes ein eindeutiger Endpunkt ist.

 [{ "id": "deployment-tutorial", "execute-command": "/root/webhooks/deployment-tutorial/deploy.sh", "command-working-directory": "/root/deployed-site/", "response-message": "Executing deploy script...", "trigger-rule": { "match": { "type": "payload-hash-sha1", "secret": "The Returners", "parameter": { "source": "header", "name": "X-Hub-Signature" } } } }] 

ID ist der eindeutige Name, der für die Endpunkt-URL verwendet wird.
execute-command - ein Skript, das ausgeführt wird, wenn der Endpunkt aktiviert wird;
Befehlsarbeitsverzeichnis - das Verzeichnis, das während der Ausführung des Befehls execute verwendet wird;
Trigger-Regel - eine Option, die aus Gründen der Informationssicherheit verwendet wird. Dies ist eine geheime Phrase für Endpunkte.

Ich möchte Sie daran erinnern, dass ich alle Aktionen von root aus ausführe. Die Startadresse lautet also / root. Wenn Sie sich als normaler Benutzer anmelden, müssen Sie / home / username registrieren, wobei der logische Benutzername der Name dieses Benutzers ist. Sie müssen ~ / nicht verwenden, der Pfad muss absolut sein, sonst wird eine Fehlermeldung angezeigt.

Möglicherweise haben Sie bemerkt, dass wir einen Arbeitsordner eingerichtet haben, der noch nicht vorhanden ist. Bevor Sie es erstellen, müssen Sie mit deploy.sh fertig sein.

Das Skript sollte immer mit "shebang" beginnen. Bevor Sie die Datei öffnen, sollten Sie welche Bash ausführen. Nun, dann werden die folgenden Befehle im Skript ausgeführt:

 #!/bin/bash git fetch --all git checkout --force "origin/master" 

Jetzt sind sowohl Go als auch Webhook installiert. Sie müssen die Konfiguration in hooks.json konfigurieren und ein Skript schreiben, das für die Bereitstellung verantwortlich ist. Er ändert das Zielverzeichnis und arbeitet mit dem Hauptzweig des GitHub-Repositorys zusammen.

Schließlich ist es an der Zeit, Webhook in den aktiven Modus zu versetzen und 000.000.000.000 durch die funktionierende IP von Doplet zu ersetzen.

 /root/go/bin/webhook -hooks /root/webhooks/hooks.json -ip "000.000.000.000" -verbose 

Zur Laufzeit stellen Sie möglicherweise eine URL-Ausgabe mit {id} am Ende fest. Dies ist die ID des Objekts, das bereits in der Datei hooks.json: Deployment-Tutorial erstellt wurde.

Einrichten von Git (Digital Ocean Droplet)


Das Server-Setup ist noch nicht abgeschlossen. Um dies abzuschließen, müssen Sie ein neues Terminalfenster öffnen und sich erneut auf dem Server authentifizieren, während im ersten Fenster Webhook ausgeführt wird. Ganz am Anfang haben wir den Repository-URI festgelegt, jetzt müssen wir ihn verwenden.

Wechseln Sie dazu in das in hooks.json angegebene Arbeitsverzeichnis und schreiben Sie Folgendes:

 git init git remote add origin git@github.com:jhsu98/deployment-tutorial.git 

In diesem Fall müssen Sie die URI durch Ihre eigene anstelle der von mir angegebenen ersetzen.

Der letzte Schritt besteht darin, SSH-Schlüssel zu generieren, um mit ihrer Hilfe eine Verbindung zu GitHub herzustellen. Geben Sie im Terminalfenster ssh-keygen ein und bestätigen Sie mit der Eingabetaste, bis die Tasten generiert wurden. Anschließend müssen Sie die öffentlichen Schlüssel anzeigen, indem Sie cat ~ / .ssh / id_rsa.pub eingeben. Sie bekommen so etwas:

 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCyzJrPVOJqsTqD2R3xirTp3VNMwpmJMyLklzJg4sRQyslTUmbNNmDVO573EbXQQf2PqPQljqKDDlSaELdav4OTi1gPCoDary300yUqC/efLGHflZ6pMNuGsP2zTzerD/TMjzl1FXF1wOGTXqcC4TvGBS1bFyUY5n8wSOJ8ntZ6bBNv0zA2t7X1vH8ahIBJLKCayq9ipobKlHPYqxBt6zAoeh/ILQ0PWhGkmbGqqzqN1jcVWOefLgj4Dl8bZWORS1nkqrVg2wFC2nnibH97kZLsNrdQaeK8jUrkUWkJcUELI02mkkqh2RtBx9EwQEvsm9YuDBD9xF+HyuWoAeqcKerb root@github-webhook-tutorial 

Nun müssen Sie nur noch das GitHub-Repository einrichten und die Bereitstellung testen.

Konfigurieren Sie den Bereitstellungsschlüssel und den Webhook (GitHub).


Wechseln Sie im Browser zu den Einstellungen für das Repository. Zuerst müssen Sie den Bereitstellungsschlüssel hinzufügen.



Wenn Sie einen Schlüssel hinzufügen, müssen Sie seinen Namen angeben und in die obige Schlüsselausgabe einfügen. Mit GitHub können Sie nur mit öffentlichen Schlüsseln arbeiten. Bei Bedarf müssen Sie also mehrere Schlüssel angeben. Sobald alles fertig ist, ist der Webhook-Bereich an der Reihe.



Die drei Felder in diesem Abschnitt erfordern besondere Aufmerksamkeit. Dies sind Nutzlast-URL, Inhaltstyp und Geheimnis. Die Payload-URL ist der Endpunkt, den Webhook abhört. Der Inhaltstyp ist das Datenformat. Secret ist die benutzerdefinierte Zeile aus der Datei hooks.json. In unserem Fall ist es "The Returners".



Nach dem Erstellen von Webhook sollte in den Einstellungen eine entsprechende Markierung angezeigt werden, die angibt, dass der Server verfügbar ist. Wenn Sie das Terminal mit einem funktionierenden Webhook überprüfen, können Sie feststellen, dass das Repository bereits in Betrieb ist.

Um den Workflow zu überprüfen, kopieren Sie das Repository auf den lokalen Computer, falls dies noch nicht geschehen ist, und nehmen Sie Änderungen am Hauptzweig vor. Danach sollten sie auf dem Server angezeigt werden. Fertig.

Der Entwickler, der dies alles schon mehrmals getan hat, verbringt etwa 10 Minuten mit der Konfiguration. Aber das ist nach Stunden des Versuchs und Irrtums. Beachten Sie diese vier wichtigen Anpassungsfunktionen:

  • Stellen Sie sicher, dass Sie den absoluten Pfad für hooks.json verwenden.
  • Machen Sie deploy.sh nicht ausführbar.
  • Bestätigen Sie die SSH-Verbindungen während des ersten „Kontakts“ von GitHub und dem Produktionsserver.
  • Verwenden Sie nicht das fehlerhafte "shebang" im Bash-Skript.

Skillbox empfiehlt:

Source: https://habr.com/ru/post/de456018/


All Articles