Definition

Kontinuierliche Integration (Continuous Integration, CI)

Was ist kontinuierliche Integration (Continuous Integration, CI)?

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

CI zielt darauf ab, schnelles Feedback zu geben, damit ein Fehler in der Codebasis so schnell wie möglich erkannt und korrigiert werden kann. Außerdem macht diese Praxis den Softwareentwicklungsprozess schneller und berechenbarer, da in kleinen Iterationen gearbeitet wird.

Während der kontinuierlichen Integration führen Softwareentwickler regelmäßig kleine Codeänderungen in ein zentrales Repository ein, in dem dann automatisierte Code-Builds und Tests ausgeführt werden. Neu entwickelter Code wird mit Unterstützung eines Versionskontrollsystems wie Git an ein gemeinsames Repository gesendet. Als nächstes führt ein CI-Dienst automatisch Tests durch – normalerweise Unit-Tests oder Integrationstests – für die neuen Codeänderungen. Wenn der automatisierte Testprozess einen Fehler findet, sperrt der CI-Dienst die Software und das Entwicklungsteam erhält einen Bericht. Die Software wird dann schnell repariert. Diese Codeintegrationen werden häufig durchgeführt, manchmal mehrmals am Tag.

Continuous Delivery (CD), zu Deutsch kontinuierliche Auslieferung, ist eine weitere gängige Praxis, mit der CI nach der Build-Phase erweitert wird, indem diese Codeänderungen in einer Test- oder Produktionsumgebung bereitgestellt werden. Die beiden Praktiken gehen Hand in Hand und werden gemeinhin als CI/CD bezeichnet.

CI hat seinen Ursprung im Paradigma der extremen Programmierung, einer Untergruppe der agilen Methodik, doch die Prinzipien können auf jedes iterative Programmiermodell angewendet werden. Auch traditionelle Entwicklungsansätze wie das Wasserfallmodell können von der Anwendung von CI-Methoden in der Konstruktionsphase profitieren.

Die Bedeutung von CI

Wenn Sie über einen längeren Zeitraum an einem Code arbeiten und diesen Code erst dann in ein zentrales Repository einbringen, wenn er fertiggestellt ist, ist der Prozess des Zusammenführens viel schwieriger und zeitaufwendiger. Dieser Prozess kann zu mehr Fehlern führen, deren Behebung mehr Zeit in Anspruch nimmt.

Das regelmäßige Zusammenführen kleinerer Codeänderungen ist in der Regel ein präziseres und sichereres Verfahren. Wenn bei der Zusammenführung Fehler gefunden werden, sind sie einfacher und schneller zu finden. Die kürzere Rückkopplungsschleife von CI ermöglicht auch mehr Iterationen des Codes.

CI beschleunigt den Prozess auch durch die Automatisierung von Tests. CI-Tools können das zentrale Code-Repository überwachen und Code-Commits akzeptieren oder ablehnen.

CI-Vorteile

Wenn ein Softwareentwicklungsteam KI in den Entwicklungsprozess einbezieht, kann es einem Unternehmen lohnende Vorteile bringen, darunter:

  • Kürzere und weniger störende Codeintegrationen. Bei CI wird weniger Code auf einmal und in kürzeren Abständen integriert als bei anderen Entwicklungsansätzen. Auch das Rückgängigmachen von Änderungen ist weniger störend, da nur einzelne Änderungen auf einmal veröffentlicht werden.
  • Schnellere und einfachere Fehlererkennung. Wenn ein Fehler auftaucht, befindet er sich höchstwahrscheinlich in der letzten integrierten Charge des Codes. Dieser Vorteil ergibt sich aus der erhöhten Sichtbarkeit des Codes, da Softwareentwickler die Codebasis ständig erweitern.
  • Feedback. CI ermöglicht ein kontinuierliches Feedback zu Änderungen, wodurch ein Produkt im Laufe der Zeit verbessert werden kann. Der Prozess macht es schneller und einfacher, auf Feedback zu reagieren.
  • Produktivität. Softwareentwickler müssen nicht bei jeder Codezusammenführung einen Test durchführen, da dieser Prozess automatisiert ist. Sie können stattdessen mehr Zeit für andere Aufgaben aufwenden.
  • Tests. Die in CI durchgeführten Tests unterstützen dabei, die Korrektheit des Codes zu überprüfen, das Verhalten der Anwendung zu validieren, den Code auf Sicherheit zu testen und automatisierte Unit-, Integrations- oder Regressionstests durchzuführen.

Wie sich kontinuierliches Testen auf CI auswirkt

Kontinuierliches Testen ist ein kontinuierlicher und oft automatisierter Softwaretestprozess, bei dem verschiedene Testarten in der Softwareentwicklungspipeline durchgeführt werden. Kontinuierliche Tests werden durchgeführt, um Fehler zu finden, sobald sie in einer Codebasis auftreten. Der kontinuierliche Testprozess verwendet automatisierte Tools zum Laden vorgefertigter Testskripte, um die Effizienz des Quellcodes zu überprüfen und nach Fehlern zu suchen. Bei jeder Codeänderung im Rahmen des kontinuierlichen Testens werden eine Reihe von Tests gestartet, um mögliche Probleme im Code zu identifizieren. Wenn ein automatisierter Test fehlschlägt, erhalten die zuständigen Teams eine Rückmeldung.

Kontinuierliches Testen ist eine entscheidende Komponente hinter CI und im CI/CD-Prozess. Kontinuierliche Tests beschleunigen die Softwareentwicklung, indem sie die Codequalität verbessern und gleichzeitig wichtige Rückmeldungen in einem frühen Stadium des Softwareentwicklungszyklus (Software Development Lifecycle, SDLC) liefern.

Gemeinsame CI-Praktiken

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

  • häufige Codeübertragungen
  • Kategorisierung von Entwicklertests
  • eine spezielle Integrations-Build-Engine
  • kontinuierliche Feedback-Mechanismen
  • Staging-Builds

CI-Releases können in beliebiger Häufigkeit erfolgen, je nachdem, welche Organisation das Projekt durchführt. Im Allgemeinen geben Unternehmen, die CI einsetzen, Software häufiger frei als Unternehmen, die andere Softwareentwicklungsprozesse verwenden. Jede wichtige Änderung löst einen Build aus. Ein Entwicklungsteam setzt CI aus mehreren Gründen ein, unter anderem um ständiges Feedback über den Status der Software zu erhalten. KI erkennt Mängel in einem frühen Stadium der Entwicklung, so dass sie weniger störend, weniger komplex und leichter zu beheben sind als in späteren Phasen des SDLC.

Ein Entwicklungsteam kann die Automatisierung im CI-Einrichtungsprozess nutzen, um die Codeintegration und die Tests einzubeziehen, was die Zeit für die Fehlersuche verkürzt und ein schnelleres Feedback ermöglicht, als wenn diese Aufgaben manuell ausgeführt werden. Automatisierungs-Tools unterstützen Teams bei der Durchführung gängiger Tests im Rahmen des CI-Prozesses, zum Beispiel Unit-, 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 funktioniert oder nicht. Bei einem Funktionstest werden in der Regel größere Teile des Quellcodes geprüft, 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.

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

CI-Tools

Ein Entwicklungsteam verwendet CI-Software-Tools, um Teile des Anwendungsaufbaus zu automatisieren und einen Dokumentationspfad zu erstellen. Es gibt viele zusätzliche Tools für Schritte in der CI-Pipeline, wie Versionskontrolle, Testen, Build-Speicherung und Artefakt-Speicherung. Im Folgenden finden Sie Beispiele für CI-Pipeline-Automatisierungs-Tools, die in der Unternehmens-IT üblich sind.

  • Azure Pipelines ist ein Microsoft-Tool, das sich mit GitHub und Azure-Hosting-Tools integrieren lässt. Azure Pipelines kann Code testen und umfasst CD- und kontinuierliche Testfunktionen.
  • Bitbucket Pipelines ist ein CI-Tool von Atlassian, das direkt in Bitbucket integriert ist. Dieses Tool verwaltet Code Commits und bietet CD-Funktionen.
  • CircleCI ist ein CI-Tool, das sich mit GitLab und Atlassian Bitbucket integrieren lässt. Mit diesem Tool können Sie die Schritte zur Erstellung von Code, zum Testen von Updates und zur Bereitstellung von Anwendungen automatisieren.
  • GitLab ist ein Open Source Repository und eine Plattform, die CI/CD unterstützt. Es kann Unit- und Integrationstests auf mehreren Rechnern durchführen und Builds auf mehrere Rechner aufteilen, um die Ausführungszeit des Projekts zu verkürzen. Die Software unterstützt auch manuelle Implementierungen für CD in Staging- und Produktionsumgebungen. GitLab unterstützt auch die Integration mit Tools wie Atlassian Jira, GitHub und Jenkins.
  • Jenkins ist ein Open Source CI-Automatisierungsserver, der Tests und Builds über zahlreiche Rechner verteilen kann. Plugins erweitern die Funktionen von Jenkins, zum Beispiel für automatisierte Unit-Tests und Testberichte. Ein Entwickler kann einen Projekt-Build über bestimmte URLs, Commits in einem Versionskontrollsystem oder ein vorgeplantes und sequenzielles System erstellen. Sobald ein System getestet ist, kann Jenkins den Code mit CD bereitstellen. CloudBees ermöglicht den Einsatz von Jenkins im Unternehmensmaßstab.
  • JetBrains TeamCity ist ein Integrations- und Verwaltungsserver für CI/CD. Er ermöglicht es Softwareentwicklern, Code zu testen, bevor sie Änderungen an einer Codebasis vornehmen. Wenn ein Test fehlschlägt, sendet das Produkt eine Benachrichtigung an die Benutzer. TeamCity bietet Build Grids, mit denen Softwareentwickler mehrere Tests und Builds für verschiedene Plattformen und Umgebungen durchführen können. TeamCity bietet Unterstützung für Docker, Atlassian Jira und andere Programme.

CI und CD

CD ist ein Prozess, der nach CI stattfindet, und die beiden Prozesse sind eng miteinander verbunden – gemeinhin als CI/CD bezeichnet. CD in CI/CD bezieht sich in der Regel auf Continuous Delivery, aber das Akronym CD kann auch für Continuous Deployment, zu Deutsch kontinuierliche Bereitstellung, verwendet werden, da beide Versionen des Begriffs häufig miteinander vermischt werden:

Bei der kontinuierlichen Bereitstellung wird der in der CI-Phase erstellte Code verschiedenen Tests auf Leistung, Sicherheit und Benutzerfreundlichkeit unterzogen. Diese Tests sind normalerweise automatisiert und umfassen Funktions-, Benutzerakzeptanz-, Konfigurations- und Lasttests. Wenn der Build erfolgreich ist, kann er mit einem Auslöser oder einer Schaltfläche, die einen menschlichen Eingriff erfordert, bereitgestellt werden.

Bei der kontinuierlichen Bereitstellung wird der Code automatisch und ohne menschliches Zutun für die Kunden bereitgestellt. Wenn der fertige Build die Tests besteht, wird er direkt in die Produktion überführt.

Sowohl Continuous Delivery als auch Deployment finden nach CI statt, und einer der beiden Prozesse wird verwendet. Der Hauptunterschied zwischen Continuous Delivery und Continuous Deployment besteht darin, dass bei Continuous Deployment jeder validierte Build automatisch in die Produktion überführt wird. Im Vergleich dazu wird bei der kontinuierlichen Bereitstellung nur der validierte Build für die manuelle Bereitstellung bereitgestellt. Die kontinuierliche Bereitstellung sollte jedoch nur dann in Betracht gezogen werden, wenn ein Team sicher ist, dass sein Code keine Probleme verursachen kann.

Diese Definition wurde zuletzt im Oktober 2023 aktualisiert

Erfahren Sie mehr über Softwareentwicklung