Was ist Continuous Integration ?
Kontinuierliche Integration in der agilen Softwareentwicklung
Die Probleme der Integration sind in der Softwareentwicklung bekannt. Der neue Code ist geschrieben und damit ist die Arbeit eigentlich erledigt. Der Quelltext muss jetzt nur noch in das große Vorhaben eingefügt werden und alle hoffen, dass dabei keine Probleme auftreten und alles zusammenpasst. Um die Katastrophe nach einer langen Entwicklungsphase zu vermeiden, entscheiden sich immer mehr Teams für Continuous Integration. Dadurch werden Änderungen täglich in das Projekt eingefügt, im Idealfall sogar mehrmals täglich.
Definition Continuous Integration (CI)?
Continuous Integration ist eine Technik der agilen Softwareentwicklung. Auf Deutsch würde man es wohl am ehesten kontinuierliche Integration oder permanente Integration nennen. Die in kleineren Schritten vorgenommenen Änderungen werden in der Praxis regelmäßig zusammengeführt. Dabei erfolgt die Einspeisung in ein unterteiltes Code Repository. Die jeweils aktuellste Code-Version wird durch einen automatisierten Build-Prozess übernommen, was zu regelmäßigen Versionskontrollen führt.
Folgendes Szenario könntest Du Dir beispielsweise vorstellen: Für einen Kunden arbeitet das Unternehmen an einer umfangreichen und komplexen Software. Die Entwickler programmieren einzelne Funktionen, während separate Teams Teilaspekte erarbeiten. Nach sehr langer, vielleicht monatelanger Arbeit wird dann alles zusammengefügt. Treten dann Probleme auf, kann es bis zum finalen Testing und dem schlussendlichen Deployment im schlimmsten Fall wieder Monate dauern, bis Fehler aufgespürt und bereinigt und die einzelnen Funktionen, quasi als Code-Schnipsel, wieder zusammengefügt sind.
Arbeitet man für dasselbe Projekt mit Continuous Integration, wird neuer Code sämtlicher Beteiligter nicht erst nach Fertigstellung der Teilbereiche eingebunden, sondern viel früher. Den fertiggestellten Code fügen die Entwickler je nach Bedarf einmal oder mehrmals täglich in die Mainline ein. Dieser Quelltext steht allen am Projekt beteiligten Programmierern offen. Diese Integration fällt dann eher kurz aus, schließlich handelt es sich dabei jeweils um relativ kleine Code-Abschnitte. Der Entwickler braucht also nur wenige Minuten, um sein Teilergebnis dem übrigen Team zugänglich zu machen. Es liegt auf der Hand, dass eventuelle Fehler so schneller aufgespürt und behoben sind.
Welche Vor- und Nachteile hat Continuous Integration (CI)?
Trotz vieler positiver Aspekte zeigt sich im Arbeitsalltag oft, dass Continuous Integration nicht nur Vorteile hat. Sicher kann die langwierige Integrationsphase am Ende eines Projekts abgekürzt werden. Probleme können frühzeitig in Angriff genommen werden. Für eingespielte Teams stellt sich eine Umstellung auf Continuous Integration aber oft als schwierig heraus. Anstatt Zeit zu sparen, kann das Verfahren dann sogar mehr Zeit kosten.
Vorteile
- Fehlersuche frühzeitig möglich
- Ständiges Feedback
- Bei Integration zum Abschluss keine Überforderung
- Änderungen werden genau aufgezeichnet
- Aktuelle und funktionierende Version stetig verfügbar
- Granulares Arbeiten wird gefördert
Nachteile
- Umstellung vom gewohnten Prozess
- Zusätzliche Server und Umgebungen werden benötigt
- Geeignete Test-Abläufe müssen erarbeitet werden
- Wartezeiten, wenn mehrere Entwickler gleichzeitig integrieren möchten
Welche Tools gibt es für Continuous Integration (CI)?
Continuous Integration lässt sich im Prinzip manuell ohne spezielle Werkzeuge managen. Das ist aber sehr aufwendig und erfordert sehr viel Disziplin. Einfacher ist es, sich die Arbeit mit nützlichen Tools zu erleichtern. Meist helfen diese beim Building und der Versionskontrolle und stellen oft einen Server zur Verfügung.
- Jenkins: Sehr populäres Java-Programm. Ein Fork von Hudson, wird aber nicht mehr weiterentwickelt.
- Travis CI: Besonders wegen der reibungslosen Funktion mit GitHub beliebt. Für Open-Source-Projekte kostenlos. Für andere
Vorhaben kostenpflichtig. - Bamboo: Software auf Java Basis. Das normalerweise kostenpflichtige Programm steht für Open-Source-Projekte auch kostenlos
zur Verfügung. - Gitlab CI: Programm zur kontinuierlichen Integration. Funktioniert mit der bekannten Versionsverwaltung.
- CircleCI: Bietet zwei Versionen für die Continuous Integration an. Entweder in der Cloud des Anbieters oder über einen eigenen
lokalen Server. - CruiseControl: Die freie Software basiert auf Java mit eigenem Dashboard für Entwickler.
- Codeship: Basiert auf der Container-Technologie. Zwei verschiedene Versionen, Basic und Pro.
- TeamCity: Kommerzielle Software, die sehr viel Wert auf Interoperabilität mit anderen Werkzeugen legt.
Einsatzgebiete/Fazit
Sehr beliebt ist Continuous Integration vor allem im Umfeld von agiler Softwareentwicklung. Die moderne Herangehensweise hat immer zum Ziel in kleinen Schritten zu arbeiten, den Entwicklungsprozess selbst effektiver zu gestalten um dadurch flexibler auf Änderungen reagieren zu können.
Mittlerweile lässt sich sagen, dass Continuous Integration in der Praxis ein erprobtes Mittel zur Optimierung der Softwareentwicklung ist. Es gibt keinen Grund, Softwareentwicklung ohne einen Continuous-Integration-Prozess zu betreiben. Dies auch dank eines breiten Erfahrungsschatzes sowie einer großen Palette fertiger Werkzeuge. Continuous Integration funktioniert aber nur, wenn alle Team-Mitglieder das System mittragen. Kommunikation ist also ein sehr wichtiger Faktor. Hält man sich gegenseitig auf dem neusten Stand, sind kleine Schwierigkeiten schnell behoben. Das Thema bleibt auch in Zukunft spannend, da aktuelle Entwicklungen in Richtung Continuous Delivery und ALM zeigen.
Rückmeldungen