So richten Sie die kontinuierliche Bereitstellung in Ihrem Heimprojekt auf einfache Weise ein

Foto von Sarah Phillips

Continuous Deployment ist eine schöne Sache. Es ist faszinierend, Ihr Projekt zu übernehmen und zu sehen, wie es erstellt und bereitgestellt wird, ohne etwas tun zu müssen.

Und in diesem Artikel möchte ich Ihnen zeigen, wie Sie es mit Leichtigkeit in Ihrem Heimprojekt erledigen können.

Zum besseren Verständnis finden Sie hier ein Flussdiagramm, in dem die Unterschiede zwischen Continuous Delivery und Continuous Deployment dargestellt sind.

Continuous Delivery vs. Continuous Deployment

Da die meiste Zeit niemand außer Ihnen von Ihrem Heimprojekt abhängt, werden wir einen Workflow mit kontinuierlicher Bereitstellung durchführen, da Sie möchten, dass Ihre Änderungen sofort bereitgestellt werden. Ist dies nicht der Fall, können Sie den Workflow später ändern.

Sie werden über Folgendes lernen:

  • Wie erstelle ich ein Dockerfile?
  • So pushen Sie Ihr Projekt zu GitHub
  • Automatisches Erstellen des Docker-Images in Docker Hub
  • Automatisches Herunterladen und Ausführen des Bildes mit Watchtower

Voraussetzungen:

  • Einige Kenntnisse über Docker und das Dockerfile, obwohl ich einige davon auf dem Weg erklären werde
  • Hab git installiert
  • Ein Docker Hub-Konto
  • Ein (Linux-) Server (physisch oder virtuell), auf dem Docker ausgeführt wird

Dies ist als Referenz das GitHub-Beispielrepository und das Docker-Hub-Beispielrepository, das ich verwenden werde.

Daher ist dieses Tutorial nur nützlich, wenn Sie beabsichtigen, Ihre Software mit Docker auszuführen (was ich als Docker fantastisch empfehle).

Warum Docker verwenden?

Mit Docker haben Sie die gleiche Umgebung für Entwicklung und Produktion, die Heisenbugs und das Problem „Es funktioniert auf meiner Maschine“ eliminiert. Außerdem sind Container isoliert, was uns Sicherheitsvorteile bringt.
Mit diesen beiden Vorteilen kann ich meine Software immer in Docker-Containern bereitstellen.

Einrichten Ihres Dockerfiles

Zunächst erstellen wir eine Docker-Datei für das Projekt. Diese spezielle Datei heißt immer „Dockerfile“ ohne Erweiterung und befindet sich im obersten Verzeichnis Ihres Projekts.

Eine Docker-Datei beginnt mit der FROM-Anweisung, die Docker mitteilt, mit welchem ​​Basisimage Sie beginnen möchten. Sie können sich vorstellen, dass Sie eine Leinwand verwenden, bei der der Hintergrund bereits gezeichnet ist und nur der zentrale Teil (Ihr Programm) fehlt.
Meistens ist das Image, das Sie abrufen möchten, das Basisimage Ihrer Programmiersprache, das Sie auf dem oben genannten Docker Hub finden.

Als nächstes kopieren wir unsere Projektdateien mit dem Befehl COPY .. in den Docker-Container. Was macht das?

Es nimmt die Dateien aus dem ersten Verzeichnis (der Punkt bezieht sich auf das aktuelle Verzeichnis der Datei, das alle Ihre Projektdateien enthält) und legt sie im aktuellen Verzeichnis Ihres Docker-Containers ab (denken Sie daran, dass Ihr Docker-Container sein eigenes Betriebssystem ist). Ihre Dateien befinden sich nun im Basisverzeichnis, das Sie möglicherweise ändern möchten.

Als nächstes müssen wir Abhängigkeiten installieren, für die ich Python Pip verwenden werde, aber jedes äquivalente Paketverwaltungssystem, das von der Sprache Ihrer Wahl abhängt, wird dies tun. Hier muss man unbedingt lernen, wie man mit RUN Befehle im Container ausführt.

Von Python: 3.7
KOPIEREN . .
RUN pip install -r requirements.txt

Einfach, nicht wahr? Jetzt müssen wir unser Programm im Container starten.

CMD ["python", "./my_script.py"]

Die CMD-Anweisung ist eindeutig. Jedes Dockerfile muss es als letzte Zeile haben, da es den primären Prozess im Container startet.

Sie haben Ihr Dockerfile fertig! Sie können jetzt Ihr Image und Ihren Container manuell erstellen. Wir werden dies jedoch vorerst überspringen.

Jetzt erstellen wir unser Repository auf GitHub, aber denken Sie daran, das Kontrollkästchen "Dieses Repository mit einer README-Datei initialisieren" nicht zu aktivieren.

Dann müssen Sie die entfernte URL kopieren.

Öffnen Sie eine Cmd / Shell im Stammverzeichnis Ihres Projekts.

Sie müssen Ihr Git-Repository initialisieren, Ihre Dateien hinzufügen, die Fernbedienung konfigurieren, die Dateien festschreiben und Ihr Projekt auf GitHub übertragen.

Git Init
git add *
git remote add origin https://github.com//.git
git commit -a -m "Dockerfile für CD vorbereiten"
Git Push -u Ursprungsmaster

Nun sollte Ihr GitHub-Repository so aussehen:

Herzlichen Glückwunsch, Sie sind ungefähr zur Hälfte fertig!

Der nächste Schritt besteht darin, GitHub mit Docker Hub zu verbinden. Dazu gehen Sie zu den Kontoeinstellungen.

Scrolle nach unten und verbinde deinen Git Host.

Erstellen Sie jetzt Ihr Repository in Docker Hub.

Geben Sie dem Repo einen Namen und klicken Sie auf das GitHub-Symbol (oder Bitbucket, falls Sie das möchten). Wählen Sie nun Ihre Organisation (normalerweise Ihren Benutzernamen) und den Namen Ihres Projekts. Wenn Sie Ihr Master-Image für den Build verwenden und immer auf den neuesten Stand bringen möchten, können Sie jetzt auf "Erstellen und Erstellen" klicken und sehen, wie Ihr Image für Sie erstellt wird. Andernfalls müssen Sie die Build-Einstellungen bearbeiten.

Letzte Schritte! Jetzt benötigen Sie Watchtower auf Ihrem Zielcomputer.
Watchtower ist ein Programm, das Ihre laufenden Docker-Images abruft und nach Updates sucht. Bei Aktualisierungen wird der ursprüngliche Container ordnungsgemäß heruntergefahren und aus dem neuen Image ein Container mit denselben Einstellungen erstellt.

Das Beste ist, dass wir Watchtower auch mit Docker installieren können!

Geben Sie Folgendes in Ihr Terminal ein:

docker run -d - name Wachturm -v /var/run/docker.sock:/var/run/docker.sock containrrr / Wachturm

Dann müssen Sie den Docker-Container für Ihr Projekt ausführen!

docker run -d --name   / 

Mit der Option "-d" wird Ihr Programm im Hintergrund ausgeführt, sodass es nicht beendet wird, wenn Sie das Terminal schließen.

Zusammenfassend lässt sich sagen, dass Docker Hub automatisch ein Docker-Image für Sie erstellt, wenn Sie ein Commit an Ihr GitHub-Repository senden. Dieses Bild wird dann von WatchTower abgerufen und mit allen ursprünglichen Optionen ausgeführt.

Wenn Sie zu irgendeinem Zeitpunkt Hilfe benötigen, haben Sie keine Angst zu fragen, ich helfe Ihnen gerne.
Wenn es sich um ein technisches Problem handelt, wäre ein Problem mit dem GitHub-Projekt großartig!

Aber was ist mit Tests?

Gute Frage!
Sie können Travis CI verwenden, um Ihre Tests gleichzeitig auszuführen.
Sie können hier darüber lesen, aber das Wesentliche ist, dass Sie Ihrem Repository eine weitere Datei hinzufügen, die Anweisungen für einen externen Server enthält, um Komponententests oder andere Anweisungen auszuführen.

Was aber, wenn ich nur möchte, dass mein Docker-Image erstellt wird, wenn die Tests erfolgreich sind?

Dies unterbricht unseren Workflow ein wenig.
Wir können uns jetzt nicht mehr auf Docker Hub verlassen, um unsere Images zu erstellen. Stattdessen wird das Image auch von Travis CI erstellt und anschließend an Ihr Docker Hub-Repository übertragen. Lesen Sie dazu hier.