Definition

Kontinuierliche Integration (Continuous Integration)

Kontinuierliche Integration (CI) ist eine Praxis der Softwareentwicklung, bei der häufige, isolierte Änderungen sofort getestet und beschrieben werden, wenn sie zu einer größeren Codebasis hinzugefügt werden.

CI zielt darauf ab, schnell Feedback zu bekommen, damit ein Fehler in der Codebasis so schnell wie möglich identifiziert und korrigiert werden kann.

CI hat seinen Ursprung innerhalb des Extreme-Programming-Paradigmas, das eine Untergruppe der Agile-Methode ist, aber die Prinzipien können auf jedes iterative Programmiermodell angewendet werden. Auch traditionelle Entwicklungsansätze, wie das Wasserfallmodell, können von der Verwendung von CI-Methoden in der Entwicklungsphase profitieren. Kontinuierliche Integration ist üblicherweise mit kontinuierlicher Auslieferung (Continous Delivery) zusammen im Einsatz, bei dem die Schritte zum Ausliefern von ausführbarem Code an die Produktion schnell und automatisiert ablaufen (CI/CD).

Gemeinsame CI-Praktiken

Laut Paul Duvall, Co-Autor von Continuous Integration: Improving Software Quality and Reducing Risk, gehören zu den Best Practices von CI:

  • Regelmäßige Code-Commits;
  • Kategorisierung von Entwicklertests;
  • Eine dedizierte Integrations-Build-Maschine;
  • Mechanismen für kontinuierliches Feedback; und
  • Staging Builds.

CI-Releases können in beliebiger Häufigkeit erfolgen, je nachdem, was für die jeweilige Organisation und das jeweilige Projekt geeignet ist. Im Allgemeinen veröffentlichen Organisationen, die CI einsetzen, häufiger als bei traditionellen Ansätzen für die Softwareentwicklung. Entwicklungsteams setzen CI aus mehreren Gründen ein, unter anderem um ein ständiges Feedback über den Status der Software zu erhalten. CI erlaubt ihnen, Mängel in einem frühen Stadium der Entwicklung zu erkennen, wodurch diese weniger störend, weniger komplex und leichter zu beheben sind als später im Lebenszyklus des Entwicklungsprozesses.

Ein Entwicklungsteam kann im Rahmen ihrer CI-Strategie Automatisierung nutzen, um Code-Integration und -Tests einzubinden, was die Zeit zum Auffinden von Fehlern reduziert und noch schnelleres Feedback ermöglicht. Automatisierungstools helfen Teams bei der Durchführung allgemeiner Tests als Teil des CI-Prozesses, wie zum Beispiel Unit-, Application-Programming-Interface- (Anwendungsprogrammierschnittstelle, API) und Funktionstests. Ein Unit-Test prüft die kleinsten Anwendungskomponenten. Ein API-Test bewertet, ob eine API unter der erwarteten Last von Anfragen und Antworten zuverlässig funktionieren kann oder nicht. Ein Funktionstest evaluiert typischerweise größere Teile des Quellcodes, um einen Benutzer-Workflow oder eine Funktion zu simulieren. Bei der vollständigen CI-Automatisierung verwalten Skripte oder Integrations-Engines die Bewegung von neuem Code durch Tests und Build.

Dieser automatisierte Ansatz ist oft ein integraler Bestandteil einer CI/CD-Pipeline und einer DevOps-Methodik. CD fungiert als eine Erweiterung von CI, nicht als Alternative. CI konzentriert sich auf die Build- und Code-Test-Teile des Entwicklungszyklus, während CD Deployment-Tests und Konfigurationsautomatisierung umfasst. Bei CD produziert ein Entwicklungsteam Software und gibt sie in kurzen Zyklen für die Produktion frei. Continuous Deployment (Kontinuierliche Bereitstellung) ist eine fortgeschrittene Variante, bei dem der Code automatisch für die Endbenutzer in die Produktion freigegeben wird.

Continuous Integration Pipeline
Abbildung 1: Die CI/CD-Pipeline ermöglicht eine schnellere Veröffentlichung von Software.

Vorteile von CI

Wenn ein Entwicklungsteam CI in den Entwicklungsprozess einbindet, kann es für ein Unternehmen lohnende Vorteile bringen.

CI ermöglicht kürzere und weniger störende Code-Integrationen, da weniger Code auf einmal integriert wird, und häufiger als bei anderen Entwicklungsansätzen. Ebenso ist das Zurücknehmen von Änderungen weniger störend, da die Änderungen isoliert veröffentlich werden.

Auch die Fehlersuche ist einfacher und schneller, denn wenn ein Fehler auftaucht, wird er höchstwahrscheinlich in der letzten integrierten Code-Charge sein. Beide Vorteile ergeben sich aus der erhöhten Sichtbarkeit des Codes, da die Entwickler die Codebasis ständig ergänzen.

CI-Werkzeuge

Ein Entwicklungsteam verwendet CI-Software-Tools, um Teile des Anwendungs-Builds zu automatisieren und einen Dokumentationspfad zu erstellen. Nachfolgend sind Beispiele für CI-Pipeline-Automatisierungstools aufgeführt, die in IT-Abteilungen von Unternehmen üblich sind. Es gibt viele ergänzende Tools für Schritte in der CI-Pipeline, wie zum Beispiel Versionierung, Testen, Builds und Artefaktspeicherung, die zu zahlreich sind, um sie hier im Detail aufzuführen.

Jenkins ist ein Open-Source-CI-Automatisierungsserver. Jenkins kann Tests und Builds über zahlreiche Maschinen verteilen. Plug-ins erweitern den Funktionsumfang von Jenkins, zum Beispiel für automatisierte Unit-Tests und Test-Reporting. Ein Entwickler kann einen Projekt-Build über bestimmte URLs, Commits in einem Versionskontrollsystem oder ein vorgeplantes und sequentielles System erstellen. Sobald ein System getestet ist, unterstützt Jenkins auch die Möglichkeit, Code mit CD zu verteilen. CloudBees ermöglicht den Einsatz von Jenkins im Unternehmensmaßstab.

Das Open-Source-Repository und die Plattform GitLab unterstützen CI/CD. GitLab kann Unit- und Integrationstests auf mehreren Maschinen ausführen und Builds auf mehrere Maschinen aufteilen, um die Projektausführungszeiten zu verkürzen. Die Software unterstützt auch manuelle Deployments für CD in Staging-Umgebungen und in Produktionsumgebungen.

GitLab ermöglicht auch die Integration mit Tools wie Atlassian Jira, GitHub und Jenkins.

Diese Definition wurde zuletzt im Dezember 2020 aktualisiert

Erfahren Sie mehr über Softwareentwicklung

ComputerWeekly.de
Close