Bei Continuous Integration (C)) handelt es sich um einen Softwareentwicklungsprozess, bei dem die Entwickler den neu geschriebenen Code im Laufe des Entwicklungszyklus häufiger integrieren und ihn mindestens einmal täglich zur Codebasis hinzufügen. Für jede Iteration des Builds werden automatisierte Tests durchgeführt, damit Integrationsprobleme früher erkannt werden können, wenn sie noch vergleichsweise einfach zu beheben sind. Dadurch können auch Probleme beim abschließenden Zusammenführungsprozess für die Freigabe vermieden werden. Continuous Integration hilft bei der Optimierung des gesamten Erstellungsprozesses, was zu einer höheren Qualität der Software und zu besser kalkulierbaren Bereitstellungsterminen führt.
DevOps bezeichnet per definitionem sowohl einen Softwareentwicklungsprozess als auch einen Wandel in der Unternehmenskultur, der die Bereitstellung qualitativ hochwertigerer Software beschleunigt, indem die Leistungen der Teams in der Softwareentwicklung und im IT-Betrieb automatisiert und integriert werden – also von zwei Gruppen, die üblicherweise getrennt voneinander oder in Silos gearbeitet haben.
In der Praxis gehen die besten DevOps-Prozesse und -Kulturen über die Entwicklung und den Betrieb hinaus. Sie beziehen die Beiträge aller an der Anwendung Beteiligten – einschließlich Plattform- und Infrastruktur-Engineering, Sicherheit, Compliance, Governance, Risikomanagement, Geschäftsleitung, Endbenutzer und Kunden – in den Lebenszyklus der Softwareentwicklung mit ein.
Im DevOps-Framework steht Continuous Integration ganz am Anfang des Softwareentwicklungsprozesses. Dabei wird Code mindestens einmal täglich eingecheckt, um zu verhindern, dass die lokalen Kopien zu stark vom Hauptzweig des Code-Builds abweichen. Auf diese Weise lassen sich katastrophale Konflikte bei der Codezusammenführung (Merge) vermeiden, durch die der Build unbrauchbar („kaputt") gemacht werden kann und deren Beseitigung das Team Stunden oder womöglich Tage kostet.
Continuous Integration fungiert als Voraussetzung für die Test-, Bereitstellungs- und Freigabephasen der kontinuierlichen Bereitstellung. Das gesamte Entwicklungsteam kann binnen weniger Minuten nach dem Einchecken bereits erkennen, ob Sie fehlerhaften Code erstellt haben, da der Service für Continuous Integration automatisch Builds Ihrer Codeänderungen erstellt und diese auf Fehler testet.
Continuous Delivery und Continuous Deployment folgen im DevOps-Zyklus auf Continuous Integration.
Continuous Delivery (CD) knüpft dort an, wo Continuous Integration endet, und automatisiert die Bereitstellung von Anwendungen in ausgewählten Infrastrukturumgebungen. CD konzentriert sich darauf, alle validierten Änderungen an der Codebasis – Aktualisierungen, Korrekturen von Programmfehlern und sogar neue Funktionen – so schnell und sicher wie möglich an die Benutzer weiterzugeben. Es sorgt dafür, dass Codeänderungen automatisiert in verschiedene Umgebungen übertragen werden, z. B. in eine Entwicklungs-, eine Test- bzw. eine Produktionsumgebung.
Bei der kontinuierlichen Bereitstellung werden die Codeänderungen für eine Anwendung automatisch in der Produktionsumgebung freigegeben. Diese Automatisierung wird durch eine Reihe vordefinierter Tests gesteuert. Sobald neue Aktualisierungen diese Tests bestehen, überträgt das System die Aktualisierungen direkt an die Benutzer der Software.
Zu den häufig genannten Vorteilen der Continuous Integration gehören die folgenden:
Agiles Arbeiten bezeichnet ein Verfahren in der Softwareentwicklung, das die Art und Weise verbessert, wie sich Softwareentwicklungsteams intern selbst organisieren, sich an geänderte Anforderungen anpassen und Softwarereleases veröffentlichen. Da kontinuierliche Integration (Link befindet sich außerhalb von IBM) und agile Entwicklung viele Merkmale (z. B. Testautomatisierung) gemein haben, kann es sinnvoll sein, nicht getrennt von Continuous Integration und agiler Entwicklung zu sprechen. Die agile Entwicklung organisiert die Entwicklung in kleinere Gruppen von Arbeitsaufgaben oder Sprints. Bei ihrer Anwendung in DevOps hilft der kombinierte Einsatz dieser Methoden, die Qualität der Software und die Flexibilität des Projekts sicherzustellen.
Continuous Integration erfordert die häufige Integration von Arbeit, oft mehrmals am Tag. Die Integration wird dann mithilfe eines automatisierten Builds überprüft, der Integrationsfehler so früh wie möglich erkennt. Der Build sollte Laufzeittests als Teil der Überprüfung enthalten. Die logische und natürliche Konsequenz der Ausweitung von Schnelltests auf Laufzeittests in einer automatisierten Testumgebung ist Continuous Delivery.
Agile Entwicklung (Link befindet sich außerhalb von IBM) ist ebenfalls iterativ und passt sich an Änderungen an, sodass Lösungen im Laufe der Zeit skaliert und weiterentwickelt werden können. Im Kontext der kontinuierlichen Integration geht es bei der agilen Softwareentwicklung darum, Softwareiterationen basierend darauf bereitzustellen, wie die Features bei der kontinuierlichen Integration jeweils priorisiert werden.
Zu den beliebten Open-Source-Tools für Continuous Integration zählen unter anderem die folgenden:
Continuous Integration mithilfe von Open-Source-Tools bietet unter anderem die folgenden Vorteile:
Zu den Open-Source-Tools für Continuous Integration, die Sie für Ihren Softwareentwicklungs-Workflow in Betracht ziehen sollten, gehören Jenkins, Go, Buildbot und Travis CI, über die Sie im nächsten Abschnitt nachlesen können.
Ein Server für Continuous Integration (CI-Server) ist ein Softwaretool, das alle Vorgänge der kontinuierlichen Integration bündelt und eine zuverlässige, stabile Plattform für die Erstellung Ihrer Projekte bietet. Sie können CI-Server konfigurieren und anpassen, um verschiedene Projekte für verschiedene Plattformen zu erstellen. Ein Server für Continuous Integration modelliert und visualisiert komplexe Workflows (ermöglicht also die kontinuierliche Bereitstellung) und stellt eine intuitive Schnittstelle für die Erstellung kontinuierlicher Lieferpipelines dar. Ein CI-Server bietet die Funktionalität für Folgendes:
Der folgende – hypothetische – Anwendungsfall veranschaulicht, wie zwei Softwareentwickler die Continuous Integrationn nutzen können, um ihren DevOps-Prozess zu verbessern.
Die beiden Entwickler müssen sich gegenseitig darüber informieren, welche Features funktionieren und wie sie funktionieren. Dieses kleine Team benötigt regelmäßige Updates und muss in der Lage sein, seinen Code als Ganzes zu integrieren und zu testen. Die Terminierung von Code-Check-ins und -Tests nehmen viel Entwicklungszeit in Anspruch. Es wird ein automatisiertes System für Continuous Integration benötigt.
Das Aushandeln, wann diese Kombinationen und Tests stattfinden sollen, würde viel Zeit der Entwickler verschlingen. Sie müssten bei den folgenden Punkten jeweils eine Einigung erzielen:
Plattformen für Continuous Integration verfügen über Standardantworten auf diese Fragen und ermöglichen in den meisten Fällen auch das Konfigurieren und Einrichten.
CI-Plattformen wie Jenkins beginnen mit Integrationstests normalerweise beim Einchecken. Wenn neuer Code eingecheckt wird, führt das CI-System eine Reihe von Tests durch, die u. a. Komponententest und Regressionstests umfassen können, und ermittelt anschließend, ob der Code erfolgreich integriert wurde.
Bei Verwendung einer kompilierten Sprache wird standardmäßig geprüft, ob der Code erfolgreich kompiliert wurde. Wenn dies nicht der Fall ist, hat der neue Code den Build zerstört. Für Sprachen wie Python oder JavaScript müssen Sie eigene Integrationstests erstellen.
Die meisten CI-Systeme protokollieren aber in jedem Fall die Integrationsversuche, die Erfolgsrate und andere Metriken.
Die Bedeutung des Testens
Kontinuierliches Testen beginnt, wenn Sie einen Build und ein Paket („installierbare Entität" oder „paketierte Entität") für Continuous Integration erstellen. Die Tests werden gestoppt, wenn das verpackte Element in die Produktion geht. Jeder Schritt dieses Vorgangs von Anfang bis zum Ende bezieht eine Testsuite ein.
Wenn nur eine Testphase ansteht, entfallen mindestens 30 Prozent der Continuous Integration auf Tests. Realistischerweise macht das Testen jedoch 50 Prozent bis 70 Prozent der Aktivitäten in der kontinuierlichen Integration aus. In der Vergangenheit musste das Testen manuell durchgeführt werden. Heutzutage können Sie automatisierte Tests einsetzen – und diese sind der Schlüssel zu einer erfolgreichen kontinuierlichen Integration.
Im Rahmen der Automatisierung von Tests für Continuous Integration wird bei der testgesteuerten Entwicklung iterativ Code erstellt und ein Anwendungsfall nach dem anderen getestet, um die Testabdeckung sicherzustellen, die Codequalität zu verbessern und die Grundlage für die Continuous Delivery zu schaffen. Automatisierte Tests zeigen Ihnen, ob einer oder mehrere der Tests für neuen Code, die in allen Funktionsbereichen der Anwendung entwickelt wurden, fehlgeschlagen ist bzw. sind. Die Best Practice erfordert, dass Entwickler alle oder eine Untergruppe von Tests in ihren lokalen Umgebungen ausführen müssen, wodurch sichergestellt wird, dass Entwickler nur Quellcode zur Versionskontrolle festschreiben, nachdem die neuen Codeänderungen ihre Tests bestanden haben. Die Erfahrung zeigt, dass die Durchführung effektiver Regressionstests dabei helfen kann, unliebsame Überraschungen zu einem späteren Zeitpunkt zu vermeiden.
Die Pipeline für Continuous Integration
In einer Pipeline für Continuous Integration werden die Abschnitte (Stages) in der Pipeline eines Projekts, wie Builds, Tests und Bereitstellungen, auf wiederholbare Weise und mit minimalem menschlichen Eingriff automatisiert. Eine automatisierte Pipeline für Continuous Integration ist unerlässlich, um die Entwicklung, das Testen und die Bereitstellung Ihrer Anwendungen zu optimieren, da sie Steuermechanismen, Prüfpunkte und eine höhere Geschwindigkeit ermöglicht.
Bewährte Verfahren für Continuous Integration
Der Prozess der kontinuierlichen Integration ist eine wichtige Komponente von DevOps, die Ihnen dabei hilft, die Aktivitäten Ihrer Entwicklungs- und Betriebsteams in einem gemeinsam genutzten Repository für das Codieren, Testen, Bereitstellen und Unterstützen von Software zu vereinen. Die nachfolgend genannten bewährten Verfahren für Continuous Integration können helfen, dass Sie dabei erfolgreich sind:
Vereinfachen Sie das Konfigurieren und Ausführen von Software-Builds mit IBM UrbanCode Build, einer für Unternehmen konzipierten Build-Management-Lösung, die ein vorlagengesteuertes System verwendet.
DevOps beschleunigt die Lieferung von qualitativ hochwertigerer Software, indem die Arbeit von Teams in der Softwareentwicklung und im IT-Betrieb kombiniert und automatisiert wird.
Continuous Delivery automatisiert die Bereitstellung von Anwendungen in Test- und Produktionsumgebungen.
Ein praktischer Leitfaden zur CI-/CD-Pipeline.