Continuous Integration

Continuous Integration – das Wort kommt einem bereits seit einiger Zeit sehr oft zu Ohren. Doch was ist das eigentlich? Für was braucht man das? Und wieso finden das eigentlich so viele Leute toll?

Continuous Integration? Continuous Delivery und Deployment?

Generell ist Continuous Integration (viele kürzen es mit „CI“ ab) sehr nah am Thema Continuous Delivery und Continuous Deployment. Aus diesem Grund, möchte ich im folgenden Text kurz die drei Begriffe voneinander differenzieren:

  • Continuous Integration: beschreibt das kontinuierliche Zusammensetzen und testen der Quellcodebasis in einem automatisierten Prozess
  • Continuous Delivery: ist die Weiterentwicklung der Continuous Integration und beschreibt den ständig deploybaren Zustand einer Software, es liegt also ständig eine verteilbare Version der Software vor
  • Continuous Deployment: ist der letzte logische Schritt dieser Kette und besagt, dass die kontinuierlich integrierte Version der Software (welche nun auch zu jeder Zeit deploybar ist) mit jedem neuen (und funktionierendem Build) automatisiert verteilt wird

Warum das Ganze?

Da wir nun wissen, was Continuous Integration ist fragen wir uns sicher: warum betreibt man so einen Aufwand, ständig releasebare Software zu haben? Man baut doch erst ein Feature zu Ende, testet das und schiebt es dann zur Marktreife ab in’s Deployment.

Nun, hier muss man die Brücke zum Thema „Agile Softwareentwicklung“ schlagen. Da man bestrebt ist vollzogene Änderungen möglichst schnell und zeitnah an den Kunden ausspielen zu können, müssen Fehler möglichst Ressourcenschonend und schnell erkannt werden. Hierbei hilft natürlich eine CI-Pipeline, welche direkt zum Zeitpunkt des pushens von Quellcode die Applikation neu baut und mittels automatischen Tests bereits prüft.

Ebenso ist es natürlich im Sinne agiler Software (auch wenn wir ein wenig vom Thema Continuous Integration abschweifen, so ist es doch ein gutes Hilfsmittel der agilen Softwareentwicklung), das Produkt möglichst schnell am Kunden ausprobieren zu können. Hierfür muss gewährleistet sein, dass das Produkt ständig funktioniert und im optimalen Fall auch ständig ausgespielt werden kann. Ein Feature, welches nicht performt, muss entweder angepasst werden – damit es funktionieren kann – oder es sollte frühzeitig eingestampft werden wenn es kein Geld bringt.

Umso komplexer natürlich der Quellcode beim „verheiraten“ der Entwicklung ist, umso fehleranfälliger wird das Ganze. Ein frühzeitiges, ständiges integrieren und testen der entwickelten Teile des Softwaresystems bringen also einen großen Vorteil mit sich – da durch das ständige Zusammenführen stärker eingegrenzt werden kann, was die mögliche Fehlerquelle ist.

Welche Software bildet das alles ab?

Es gibt so einige Tools, welche zur Unterstützung eines CI-Prozesses verwendet werden können. Die zwei bekanntesten hierfür dürften Travis-CI und Jenkins sein.

Jenkins ging damals aus dem Hudson-Projekt hervor und ist seit jeher ein sehr flexibles und anpassbares Tool zum Umsetzen von CI-Pipelines. Ebenso bekannt ist Travis-CI. Dieses verfügt über eine direkte Anbindung an GitHub und liefert hier (durch das einchecken einer .travis-ci.yml-Datei) eine hohe Flexibilität durch direkt im Repository befindliche Taskbeschreibungen.

Die Ansätze hierbei sind sehr verschieden. Während man für Jenkins direkt die auszuführenden Tasks im Jenkins selbst konfiguriert, geht Travis-CI den umgekehrten Weg. Die Tasks werden hier direkt im Repositry beschrieben. Anmerkung: es gibt auch für Jenkins ein Plugin, welches den Travis-CI-Weg zur Verfügung stellt.

Vermutlich etwas weniger bekannt dürfte Gitlab-CI sein. Gitlab ist eine hochintegrierte Umgebung, welche ein Git Repository und ein Continuous Integration System ineinander vereint. In meinen Augen sind alle drei Tools gelungen – wenngleich Gitlab-CI und Travis-CI ein wenig die Nase vorn haben, da sie ohne weiteren Extra-Konfigurationsaufwand „Out of the Box“ mit ihren Quellcodemanagementsystemen verzahnt sind.

Links:

  • https://gitlab.com
  • https://jenkins.io
  • https://travis-ci.com

Schreibe einen Kommentar