Wenn der Gitlab Server den Jenkins Server über eine neue Version informiert, der Jenkins Server diese zusammenbaut, der Container ein Shell Skript zur Ausführung von Testprozessen durchführt und zum Schluss der Benutzer über das Ergebnis informiert wird, dann ist das Continuous Integration, nämlich „fortlaufendes Zusammenfügen von Komponenten zu einer Anwendung“.
Wie oft hört man den Begriff Continuous Integration? Und wie oft weiß man mit diesem Begriff nicht wirklich etwas anzufangen? Um herauszufinden, was Continuous Integration nun also wirklich ist, bemühen wir zunächst einmal Wikipedia: „…Prozess des fortlaufenden Zusammenfügens von Komponenten zu einer Anwendung…“. Am Ende dieses Artikels werden wir sehen: Das beschreibt es schon ziemlich gut!
In diesem Beispiel gehen wir auf ein Testsystem ein, welches eine fehlerfreie Entwicklung der EasiRun Anwendung Highway61 sicherstellt. Durch die Continuous Integration wird manuelles Testen vollständig überflüssig und dieser Zeitaufwand komplett eingespart. Um dies zu gewährleisten, wird zunächst ein Smoke Test erstellt, der möglichst alle Bereiche der Anwendung anspricht und testet, ob diese in einer neuen Version funktionieren.
Als exemplarisches Verfahren: In unserem Unternehmen nutzen wir dafür neben dem Gitlab Server eine zweite Komponente, einen Jenkins Server. Der Jenkins Server ist mit dem Gitlab Server über einen Webhook verbunden. Das heißt, der Gitlab Server informiert den Jenkins Server wenn neuer Source Code auf diesem eingegangen ist. Der Jenkins Server erzeugt aus diesem neuen Source Code im Build-Prozess neue Komponenten und führt unter Nutzung von ant-Skripten diverse weitere Prozessschritte aus, die letztlich den Smoke Test anstoßen. Dabei durchläuft der Jenkins Server folgende Prozessschritte:
-
- Bauen diverser Komponenten
- Erstellen eines Arbeitsverzeichnisses
- Kopieren der einzelnen gebauten Komponenten in das Arbeitsverzeichnis
- Kopieren eines Dockerfiles zum Arbeitsverzeichnis
- Kopieren der Abhängigkeiten des Dockerfiles zum Arbeitsverzeichnis
- Bauen eines Container Images
- Kopieren der Smoke Test Dateien in einen mit dem Container geteilten Ordner
- Ausführen des Containers und Analyse des Ergebnisses des ausgeführten Smoke Tests
Das Container-Image selbst enthält ein Bash-Skript, das beim Start des Containers ausgeführt wird und die notwendigen Schritte zur Ausführung des Smoke Tests durchführt. Natürlich können noch weitere Prozesse zum Einsatz kommen, falls diese erwünscht sind, wie z. B. Performancetests, Stresstests und Ähnliches.
Wenn zum Schluss in der Gesamtprozedur zu sehen ist, wie der Gitlab Server den Jenkins Server über eine neue Version informiert, der Jenkins Server diese zusammenbaut, der Container ein Shell Skript zur Ausführung von Testprozessen durchführt und zuallerletzt der Benutzer über das Ergebnis informiert wird, ist erkennbar, dass die Wikipedia Definition von Continuous Integration durchaus korrekt ist.