Heroku ist ein Platform as a Service (PaaS) Anbieter. Mit Heroku Pipelines stellt Heroku seit kurzem die Möglichkeit bereit, schnell und einfach eine Continuous Delivery Pipeline aufzubauen. Deshalb ist das Thema vor allen Dingen für Entwickler interessant, die sich auf die Entwicklung von Anwendungen konzentrieren aber trotzdem nicht auf die Vorteile von Continuous Delivery verzichten wollen. Auch für IT Manager spielt die Entscheidung zwischen Do-it-Yourself Continuous Delivery oder Heroku PaaS Umgebung eine wichtige Rolle. Darum zeige ich in diesem Blogpost, wie eine Heroku Pipeline aussieht und wie sie sich von einer klassichen Continuous Delivery Pipeline abgrenzt. Zu einer klassischen Continuous Delivery Pipeline gehört neben der Deployment Automatisierung auch die Ausführung von automatisierten Tests und Code Metriken. Folglich gehe ich auch auf die Integration von Heroku mit GitHub und verwandten Services wie Travis CI , coveralls.io und codacy ein.
Die klassische Continuous Delivery Pipeline
Welcher Entwickler kennt das nicht: Ein neues Projekt wird gestartet, doch statt von Beginn an an der Lösung der Business Probleme zu arbeiten, verbringt man die ersten Sprints mit dem Aufsetzen der Entwicklungsinfrastruktur. Wir müssen einen Build Server einrichten und entsprechende Build Jobs konfigurieren. Außerdem wollen wir für das Deployment verschiedene Umgebungen haben. Häufig gibt es hier die Dreiteilung zwischen Development, Integration (oder QA) und Production Umgebung. Ist die Infrastruktur fertig aufgebaut, will diese natürlich auch regelmäßig von uns gewartet werden. Eine klassische Continuous Delivery Umgebung sieht heutzutage ungefähr so aus:
Den Weg, den ein neues Feature durch diese Continuous Delivery Umgebung nimmt, habe ich mit Zahlen markiert:
- An unserem Arbeitsplatz entwickeln wir ein neues Feature und machen ein Code Review.
- Nach erfolgreichem Code Review, pushen wir die Änderung in ein zentrales git Repository.
- Von dort wird diese vom Build Server gebaut, getestet und es werden Codemetriken erhoben.
- Häufig gibt es außerdem noch Jobs, mit denen wir ein Deployment in unterschiedliche Umgebungen anstoßen können.
- Da wir schnell und einfach skalieren wollen, betreiben wird die Development, Integration und Production Umgebungen bei AWS .
- Für die Provisionierung der Umgebungen nutzen wir ein Provisionierungstool wie z.B. Ansible .
In der Abbildung sind eine ganze Reihe von Infrastrukturkomponenten zu sehen, um die wir uns selber kümmern müssen: Ein Git Repository, der Build Server mit seinen Build Jobs (in unserem Beispiel Jenkins ), verschiedene Ausführungsumgebungen bei AWS , sowie Provisionierungsskripte. Viele bewegliche Teile, die Probleme machen können. Manchmal reicht schon ein Systemupdate auf dem Build Server, welches eine neue Java Version installiert und plötzlich schlagen Build Jobs fehl. Die Ursachenforschung kostet Zeit und Nerven.
Heroku Pipelines
Glücklicherweise müssen wir einen Großteil dieser Arbeit heutzutage nicht mehr selbst machen. Heroku Pipelines sind eine einfache Lösung zum Aufsetzen einer Continuous Delivery Pipeline. Dabei werden mehrere Heroku Apps miteinander verkettet (wie man eine Heroku App konfiguriert, habe ich bereits in einem anderen Blogpost beschrieben). Eine Heroku Pipeline sieht im Heroku Dashboard dann so aus:
Zu sehen sind drei Umgebungen: Review, Staging und Production. Schauen wir uns den Ablauf eines Deployments genauer an. Die erste Umgebung, die eine Änderung durchläuft, ist die Review Umgebung. Hier wird für jede Änderung ein eigenes Deployment der Anwendung durchgeführt. Besonders gut funktioniert das, wenn Heroku mit GitHub integriert betrieben wird (siehe Abschnitt Integration mit GitHub und co.). Sofern eine Änderung auf der Review Umgebung für gut befunden wurde, wird sie zurück in den Master Branch gemerget. Diesen Merge Commit registriert Heroku und löst ein automatisches Deployment der Anwendung auf die Staging Umgebung aus. Staging ist also eine Integrationsumgebung, auf die Änderungen am Master Branch automatisch deployt werden. Die finale Umgebung ist Production. Hier bietet es sich an, das Deployment so zu konfiguieren, dass es explizit ausgelöst werden muss. Dann können wir auf Staging so lange Änderungen sammeln, bis der gewünschten Umfang für das nächste Production Release erreicht ist. Eine explizite Promotion von Staging nach Production sieht dann so aus:
Das ist schon ziemlich komfortabel! Wir müssen keine Deployment Jobs in unserem Buildserver pflegen, sondern können mit einem Knopfdruck auf unsere Produktionsumgebung deployen. Heroku Pipelines machen aber alleine noch keine Continuous Delivery Umgebung aus. Für automatisierte Deployments sind eine umfassende Testumgebung sowie Codemetriken unerlässlich.
Integration mit GitHub und co.
Die fehlenden Teile der Continuous Delivery Umgebung können wir sehr einfach mittels GitHub und weiterer Services auffüllen. Hier sind vor allen Dingen die folgenden zu nennen:
- Travis CI für die Ausführung automatisierter Tests
- coveralls.io für die Bewertung der Testabdeckung
- Codacy für die Bewertung der Code Qualität
Eine Continuous Delivery Pipeline bestehend aus Heroku, GitHub, Travis CI, coveralls.io und Codacy sieht schematisch so aus:
Weitere Beiträge
von Benedikt Ritter
Dein Job bei codecentric?
Jobs
Agile Developer und Consultant (w/d/m)
Alle Standorte
Weitere Artikel in diesem Themenbereich
Entdecke spannende weiterführende Themen und lass dich von der codecentric Welt inspirieren.
Gemeinsam bessere Projekte umsetzen.
Wir helfen deinem Unternehmen.
Du stehst vor einer großen IT-Herausforderung? Wir sorgen für eine maßgeschneiderte Unterstützung. Informiere dich jetzt.
Hilf uns, noch besser zu werden.
Wir sind immer auf der Suche nach neuen Talenten. Auch für dich ist die passende Stelle dabei.
Blog-Autor*in
Benedikt Ritter
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.