July 30, 2019

Automate this shit!

Ein kleiner Einblick in unseren DevOps Workflow.

Automate this shit!

Da DevOps eine immer weitere Verbreitung findet, haben wir uns logischerweise auch Gedanken dazu gemacht. Macht der Einsatz von DevOps Techniken für unser aktuell noch recht kleines Projekt dennoch Sinn?

Diese Antwort ließ sich recht einfach finden. Denn wir hatten unser Projekt schon in verschiedene Module unterteilt. Jedes davon sollte unabhängig von den anderen gebaut, getestet und anschließend automatisch deployed werden.
Kurz gesagt wollten wir die beiden Techniken Continuous Integration und Continuous Delivery umsetzen.

Continuous Integration (CI)
Bei der Entwicklung des Cores der Anwendung wurde auf eine gute und sinnvolle Testabdeckung geachtet. Dort werden alle Use Cases und Business Rules abgebildet. Daher muss sichergestellt werden, dass sich dort keine Fehler finden. Außerdem ist es wichtig, dass der Build und die Testsuite in einer immer identischen Umgebung ausgeführt werden. Daher kommt das offizielle Maven Docker Image zum Einsatz.
Dabei wird ein CI Server benötigt um regelmäßig Builds und Tests anzustoßen.
Aktuell haben wir uns für einen Jenkins als CI Server entschieden. Hierfür wird das offizielle Docker Image verwendet. Innerhalb dieses wir dann der Continuous Integration Prozess, welcher aktuell hauptsächlich aus der Ausführung der Tests besteht, angestoßen. Aktuell geschieht dies nach jedem Commit oder dem Erstellen eines Tags, genauso wie beim Mergen von Branches.

Continuous Delivery (CD)
Da wir bisher lediglich den Core der Anwendung fertig gestellt haben, ist unser CD Workflow noch recht übersichtlich.
Das Core Modul wird aktuell von dem sich in der Entwicklung befindlichen Android Modul benutzt. Daher wird ein Maven Repository benötigt, welche das Core Modul als Paket zur Verfügung stellt. Dieses wir von einem Nexus Server gehostet. Auch dieser läuft aktuell als Docker Container.
Um nun den Deployment Prozess möglichst reibungsfrei gestalten zu können, ist es sinnvoll diesen zu automatisieren. Aktuell wird nach jedem erfolgreich ausgeführten CI Prozess das Deployment angestoßen. Dabei überträgt der Jenkins die JAR auf den Nexus. Somit ist immer die aktuellste Version im Maven Repository verfügbar.

Ausblick
Der aktuelle DevOps Prozess behandelt lediglich den Build- und Testprozess des Core und des Android Moduls. Auch wird das Core Modul automatisch deployed. Es ist aktuell abzusehen, dass bei einem Release der Android App auch der Prozess des Deployments der APK in den Google Play Store automatisiert werden soll. Allerdings ist noch nicht klar welche Möglichkeiten Google an dieser Stelle bietet. Ähnlich sieht es auch bei geplanten iOS App aus.

Etwas anders verhält es sich bei der geplanten Web App und dem Backend. Das Backend soll die Synchronisierung der verschiedenen Clients sicher stellen. Da diese beiden aus dem Internet abrufbar sein sollen, müssen Webserver eingesetzt werden. Dabei sollen diese innerhalb eines Kubernetes Cluster ausgeführt werden. Auch soll evaluiert werden ob die Dienste wie der Nexus oder der Jenkins auf eine Kubernetes Plattform umgezogen werden.
Das Kubernetes Cluster soll in einem anderen Eintrag behandelt werden.
Die Antwort auf die Frage ob DevOps dich auch für kleinere Projekte eignet lautet also, dass DevOps ein ziemlich hilfreiches und mächtiges Konzept ist, welches durchaus auch für kleinere Projekte eingesetzt werden kann.

Photo by Kobu Agency on Unsplash