Development & Operations - DevOps und Continuous Integration

Sie möchten ein qualitativ hochwertiges Produkt entwickeln lassen? Der ganze Prozess soll zusätzlich noch beschleunigt werden?

Dann sind Sie bei unserem DevOps-Ansatz genau richtig.

Wenn alle notwendigen Kompetenzen zur Entwicklung (Dev) und dem Betrieb (Ops) in einem Team vereint sind, wird dieser Prozess vereinfacht und beschleunigt. Dies wird häufig als „DevOps“-Team bezeichnet.

Unser DevOps-Team kann dann die komplette Verantwortung für das Produkt übernehmen. Es hat bei der Optimierung des Prozesses (Wie können wir öfter releasen?) alle Aspekte im Auge und kann Fehler schnell finden und beheben, unabhängig davon, ob sie im Anwendungscode oder an der Infrastruktur liegen.

Container

Docker Container sind die Basis für unsere CI/CD-Pipeline

Continuous Integration und Continuous Delivery

Im klassischen Vorgehen bei der Softwareentwicklung werden nur selten neue Versionen von Anwendungen released. Oft testet der Kunde die Anwendung nach Abschluss der Entwicklung und veröffentlich sie anschließend.

In der agilen Softwareentwicklung arbeiten wir in kleinen Iterationen. Wir möchten möglichst früh eine simple, funktionierende Version der Anwendung veröffentlichen und dann möglichst oft und in möglichst kleinen Schritten neue Funktionen veröffentlichen. Dies ermöglicht es den Fortschritt kontinuierlich zu überwachen und flexibel auf Änderungen der Anforderungen (zum Beispiel durch Feedback der Nutzer) zu reagieren.

Häuftige Releases als Vorteil

Als Folge der kleinen Iterationen gibt es immer häufiger Releases und die Anwendung muss immer öfter getestet und deployed werden. Entgegen der ersten Intuition „Ich möchte alles möglichst gründlich und lange testen und deshalb lieber seltener neue Versionen veröffentlichen“, senken häufige Releases das Risiko:

  • Wenn seit dem letzten Release nur sehr wenig verändert wurde, kann auch nicht viel kaputt gegangen sein.
  • Wenn etwas kaputt gegangen ist, weiß man sehr genau, an welcher Stelle das passiert sein muss und kann es in der Regel auch sehr schnell reparieren.

Außer dem geringeren Risiko, haben häufige Releases den großen Vorteil, dass die Nutzer schon früher von den neuen Funktionen profitieren, die sich bestenfalls in einer höheren Nutzerzufriedenheit oder einem höheren Umsatz niederschlagen. Warum sollen die Nutzer Monate auf ein großes Release mit zehn neuen Funktionen warten, wenn neun davon schon viel früher fertig waren?

Viele sehr erfolgreiche Unternehmen wie Github, Facebook und Amazon treiben dies auf die Spitze und releasen jeden Tag mehrere duzend oder hundertmal kleine Änderungen.

Automatisierung in einer CI-Pipeline

Ein regelmäßiges und sicheres Deployment ist (ähnlich wie das Testen) nur mit Automatisierung möglich. Deshalb automatisieren wir bei Ambient Innovation: den kompletten Prozess. Dies wird als „Continuous Integration“ bezeichnet. Eine typische Pipeline bei Ambient Innovation sieht so aus:

Merge

Nach der erfolgten Qualitätssicherung des Codes (Code Review), werden die Änderungen am Code in den Ziel-Branch gemerged.

Linting

Anschließend wird die Struktur des Codes (Einrückung, Variablennamen etc.) automatisiert entsprechend der im Projekt getroffenen Konventionen („Linting Rules“) geprüft.

Unit Tests

War das Linting erfolgreich, werden die Unit Tests ausgeführt.

Akzeptanztests

Wenn alle Unit Tests erfolgreich waren, werden die funktionalen Akzeptanztests ausgeführt, welche das Verhalten eines Nutzers simulieren.

Building

Nachdem alle Tests erfolgreich waren, wird aus dem neuen Source Code ein Docker-Image gebaut. Hiermit besteht ein Artefakt, welcher diese aktuelle Version komplett „einfriert“ und welcher dann deployed werden kann.

Deployment

Der Austausch des aktuellen Docker-Images mit dem neuen Docker-Image wird vorgenommen. Nachdem alle Container ausgetauscht wurden, ist das Deployment abgeschlossen und die neue Version der Anwendung ist verfügbar.

DevOps unterstützt Continuous Integration

Verschiedene Umgebungen und Continuous Delivery

Diese Pipeline kann wiederum für verschiedene Umgebungen durchgeführt werden. Sollen die neuen Funktionen in die Produktivumgebung, oder vorerst auf einen Testserver oder eine Staging-Umgebung deployed werden? Das Vorgehen ist hier je nach Team und Projekt unterschiedlich. Viele Teams arbeiten nach dem sogenannten „GitFlow“-Prozess:

  • Der aktuelle Stand der Branch „develop“ wird automatisch in eine Testumgebung deployed.
  • Der aktuelle Stand der Branch „master“ wird automatisch in die Produktivumgebung deployed.
  • Die CI-Pipeline wird also durch das Mergen einer Funktion oder eines Bugfixes in die jeweilige Ziel-Branch angestoßen.

Wenn jede Änderung direkt in die Produktivumgebung deployed wird, spricht man von „Continuous Delivery“, weil kontinuierlich neue Features „geliefert“ (delivered) werden. In diesem Fall werden nicht erst mehrere Features gemeinsam auf einem Testserver getestet, sondern jedes Feature wird einzeln getestet und dann direkt released.

Tools für Continuous Integration

Wir arbeiten in der Regel mit folgenden Tools:

  • Gitlab und GitlabCI: Gitlab ist eine grafische Oberfläche zur Verwaltung von Git Repositories. Gitlab bietet darüber hinaus moderne Tools zur Ausführung der einzelnen Aufgaben bei der Continuous Integration.
  • Docker: Die CI-Pipeline bei Ambient Innovation: basiert stark auf Docker. Durch das „Verpacken“ der Anwendungen in Containern, wird eine Vereinheitlichung erreicht und große Teile der CI-Pipelines bleiben in den verschiedenen Projekten trotz teilweise unterschiedlicher Programmiersprachen gleich.
  • Kubernetes: Kubernetes ist eine Plattform zur Orchestrierung von Docker-Containern, welche wir sehr stark einsetzen, um die Anwendungen unserer Kunden zu betreiben.

Möchten Sie mehr zum DevOps-Ansatz in der Softwareentwicklung erfahren? Oder Ihr Unternehmen mit automatisieren Tests auf ein neues Level heben?

Gehen Sie den ersten Schritt und nehmen Sie Kontakt zu uns auf!
Wir freuen uns auf Sie.

Rufen Sie uns jetzt an