Deployments automatisieren: Unsere Tools und Prozesse
In meinem letzten Artikel habe ich beschrieben, welche Vorteile automatisiertes Deployment für die verschiedenen Parteien haben. Doch was nützt es, zu sagen, dass etwas ganz toll ist, ohne darüber zu reden, wie man das Ziel erreicht? Das erkläre ich Euch in diesem Artikel!
Ein paar Worte über Deployment-Ziele
Unser Server- bzw. Hosting-Umfeld ist sehr heterogen, was unserem Ansatz geschuldet ist, kein Hosting für Kund*innen zu übernehmen. Unsere Kund*innen suchen ihr Hosting nach ganz unterschiedlichen Kriterien aus und wir haben natürlich auch immer Empfehlungen in der Hinterhand.
Generell ist es natürlich einfacher, wenn man nur mit einer Art von Ziel arbeitet, aber auch hier können Faktoren wie Betriebssystem-Updates die Pipeline lahm legen, falls diese unangekündigt geschehen.
Am besten ist es also, nicht nur Tools zu nutzen, die gut mit unterschiedlichen Umgebungen umgehen können, sondern auch die Prozesse selbst so zu gestalten, dass sie portabel sind.
Unsere Erfahrung hat gezeigt, dass es auch wichtig ist, diese Prozesse regelmäßig laufen zu lassen - eine Aufgabe, die 1,5 Jahre lang nicht ausgeführt wurde, hat eine hohe Wahrscheinlichkeit, nicht mehr komplett durch zu laufen. Für diesen Fall kann man einen Cronjob oder ähnliches einrichten, der diese Aufgabe einmal die Woche ausführt - selbst, wenn dieser Job manchmal nichts verändert.
Ein Blick auf die Pipeline
Die sogenannte Pipeline ist im Grunde nichts anderes als eine Liste von Jobs, die nacheinander ausgeführt werden. Dank moderner Umgebungen kann man hier alles Mögliche anstellen, zum Beispiel virtuelle Browser starten, um komplexe Nutzer-Interaktionen zu testen.
Mein Anspruch an so eine Pipeline ist aber am Anfang nicht zwingend, alles darin zu erledigen. Gerade bei Legacy-Projekten finde ich es auch schwierig, mit einem Paukenschlag alles zu ändern.
Am Anfang konzentriere ich mich also zunächst darauf, die Handarbeit zu ersetzen, das heißt meistens, dass das Git-Archiv am Ziel-Server aktualisiert wird. Erst wenn dieser Schritt steht, mache ich mich daran, andere Dinge zu automatisieren, zum Beispiel einen Test der Codequalität laufen zu lassen.
An dieser Stelle kann man natürlich kreativ werden und alles Mögliche rein packen. Komplexe Pipelines bauen bei uns das ganze Frontend, machen End-to-End-Tests, führen Unit-Tests für das Backend aus und deployen das Ganze dann inklusive nötiger Migrationen auf die Ziel-Server. Basierend auf dem Git-Zweig landet der Code dann entweder auf einem Staging- oder Live-Server. Backups vor dem Deployment werden natürlich auch nicht vergessen.
Unsere Tools für automatisierte Deployments
Versionskontrolle - GitHub
Alle unsere Projekte liegen in einer Versionskontrolle - Git mit Hosting bei GitHub, genauer gesagt. Wir sehen dies als wesentlichen Teil moderner Entwicklung. In dem Modell des automatisierten Deployments braucht es immer etwas, das den Prozess anstößt. Das kann wie oben erwähnt ein Cronjob sein, aber bei aktiven Projekten ist es wesentlich effizienter, dies basierend auf Commits zu machen - wenn die Entwicklung mit einem Feature also fertig ist, wird der Prozess für das Ausrollen automatisch gestartet.
Continuous Integration / Continuous Deployment - CircleCI
Plattformen für kontinuierliche Integration (Continuous Integration, CI) und kontinuierliches Ausrollen (Continuous Deployment, CD) gibt es einige. Wir sind bei CircleCI gelandet. Dieser Service überwacht die Versionskontrolle und reagiert entsprechend darauf. Hier werden in unterschiedlichen Umgebungen (direkt auf Servern, in Containern) die Skripte ausgeführt, welche die Pipeline aufbauen.
Und nun das wichtigste Tool: Ansible
Ansible ist ein Framework, um Dinge reproduzierbar auszuführen - das Ziel ist es immer, einen bestimmten Zustand auf einem Ziel herzustellen. Auch bei diesen Frameworks gibt es viele unterschiedliche, aber wir sind bei Ansible gelandet, weil es nichts weiter als eine SSH-Verbindung und Python braucht, während andere Tools oftmals auf Server-Seite installiert sein müssen. Dies erlaubt uns die unglaubliche Flexibilität, die wir in unserer Umgebung benötigen.
Ihr findet das Thema automatisierte Deployments genauso spannend wie ich? Dann freut Euch schon auf den nächsten Artikel, in dem wir darstellen, wie unsere Traum-Umgebung für automatisierte Deployments von Kopf bis Fuß aussieht!
Ihr habt Fragen oder braucht Beratung? Dann geht’s hier zu unserer Kontaktseite , wo Ihr uns eine Nachricht hinterlassen oder einen kostenlosen Beratungstermin buchen könnt!