Continuous Integration und Delivery mit Feature Branches

Über automatisierte Testverfahren mit Feature Branches und die Anforderungen an die Continuous Integration Pipeline.

Agile Software­entwicklung dank automatisierter Testverfahren

Wir, bei der x-root Software GmbH, haben uns der agilen Softwareentwicklung verschrieben. Ein wichtiger Teil agiler Softwareentwicklung ist es, Feedback zeitnah zu erhalten und umzusetzen. Um das zu gewährleisten nutzen wir automatisierte Testverfahren, die uns schnell erkennen lassen, ob die Funktionalität der Anwendung auch nach der Durchführung von Änderungen am Code der Software noch gewährleistet ist.

Des Weiteren bietet es sich besonders bei größeren Features, die unter Umständen nicht zum Release der nächsten Version fertiggestellt werden können, an, mit Feature Branches zu arbeiten. Um Zeit zu sparen sollen diese automatisch getestet und anschließend selbsttätig auf eine Testumgebung aufgespielt werden, wo sie über das Web Frontend für eine weitere, manuelle Überprüfung erreichbar sein sollen.

Anforderungen an die Continuous Integration Pipeline

Die daraus resultierenden Anforderungen an die Continuous Integration (CI) und Delivery Pipeline sind:

  • Automatische Durchführung der Pipeline bei Einreichen eines Merge Requests vom Feature Branch in den Hauptenwicklungszweig
  • Dynamischer Auf- und Rückbau der Umgebung (Backend und Frontend)
  • Alle Funktionen der Anwendung sollen manuell testbar sein
  • Mehrere Merge Requests können gleichzeitig existieren, deshalb müssen auch mehrere Testumgebungen parallel und unabhängig voneinander bestehen können
  • Erreichbarkeit der Testumgebung

Umsetzung der CI-Pipeline

Die Umsetzung erfolgt anhand der in GitLab integrierten Möglichkeit eine CI-Pipeline zu definieren, sowie der Nutzung von Docker-Containern. Um die dynamischen Testumgebungen per HTTP erreichen zu können wird ein Reverse Proxy als Container eingesetzt, der die Anfragen auf die jeweiligen Testumgebungen weiterleitet.

GitLab-CI nimmt Notiz von neuen Merge Requests und führt für diese die Pipeline durch. Die Pipeline besteht aus mehreren Schritten:

  1. Erstellen des Datenbank-Containers.
  2. Erstellen eines weiteren Containers, der der Kompilierung und dem automatisierten Testen der Anwendung dient.
  3. Aufbau der Testumgebung, bestehend aus einem Frontend- und einem Backend-Container. Hierauf wird die kompilierte Anwendung deployt und das neue Feature kann manuell geprüft werden.

Ist die Funktionalität wie erwartet, so kann der Merge Request angenommen werden. Daraufhin wird das Feature Teil des Hauptentwicklungszweigs und die aus dem Feature Branch entstandene Umgebung abgebaut.