Kontinuierliche Integration

menu icon

Kontinuierliche Integration

In diesem Leitfaden erfahren Sie mehr zum Thema kontinuierliche Integration, ein Ansatz für Softwareentwicklung und DevOps, in der jeder Entwickler mindestens einmal täglich seinen neuen Code in den Hauptzweig des Codes integriert.

Was ist kontinuierliche Integration?

Kontinuierliche Integration ist ein Softwareentwicklungsprozess, bei dem Entwickler den von ihnen neu geschriebenen Code während des gesamten Entwicklungszyklus mit höherer Häufigkeit integrieren und mindestens einmal täglich zur Codebasis hinzufügen. Es werden für jede Iteration des Builds automatisierte Tests durchgeführt, um Probleme bei der Integration früher und zu einem Zeitpunkt zu identifizieren, zu dem sie einfacher zu beheben sind. Dies hilft außerdem dabei, Probleme bei der endgültigen Zusammenführung für das Release zu vermeiden. Insgesamt hilft die kontinuierliche Integration, den Erstellungsprozess zu optimieren, was in einer qualitativ hochwertigen Software resultiert und zu Zeitplänen für die Lieferung führt, die besser vorhersagbar sind.

Kontinuierliche Integration (Continuous Integration, CI) vs. Kontinuierliche Bereitstellung (Continuous Deployment, CD)

Bei der kontinuierlichen Integration integriert jeder Entwickler mindestens einmal täglich seine Arbeit in den Hauptzweig des Quellcodes (oder vorzugsweise sogar mehrmals täglich). Kontinuierliche Bereitstellung, eine weitere DevOps-Praxis, konzentriert sich im Gegensatz dazu darauf, alle validierten Änderungen an der Codebasis – d. h. Updates, Bugfixes und sogar neue Funktionen – so schnell und sicher wie möglich an die Nutzer zu liefern. Durch die kontinuierliche Bereitstellung wird der Prozess weiter optimiert, wobei automatisierte Tests zur Validierung von Änderungen an der Codebasis durchgeführt werden, was wiederum zu zeitnäheren Aktualisierungen führt.

Kontinuierliche Bereitstellung macht da weiter, wo kontinuierliche Integration endet und automatisiert die Bereitstellung von Anwendungen für ausgewählte Infrastrukturumgebungen. Sie sorgt dafür, dass Code-Änderungen automatisch in verschiedene Umgebungen, wie z. B. Entwicklung, Testen und Produktion, gepusht werden.

Vorteile

Die folgenden sind einige der wichtigsten Vorteile, die die kontinuierliche Integration bietet:

  • Kontinuierlicher und klarer Fortschritt, der verbessertes Feedback ermöglicht
  • Frühzeitige und verbesserte Fehlererkennung und Metriken, mit denen Sie Fehler frühzeitig beheben können – manchmal innerhalb weniger Minuten nach dem Check-in
  • Verbesserte Zusammenarbeit im Team; jedes Teammitglied kann den Code ändern, in das System integrieren und schnell feststellen, ob Konflikte mit anderen Teilen der Software bestehen
  • Verbesserte Systemintegration, was zu weniger Überraschungen am Ende des Softwareentwicklungszyklus führt
  • Weniger parallele Änderungen für Zusammenführen und Testen
  • Weniger Fehler während der Systemtests
  • Ständig aktualisierte Systeme, die getestet werden können

CI, Agile Entwicklung und DevOps

Agil

„Agil" ist ein Ansatz für die Softwareentwicklung, der verbessert, wie sich Teams in der Softwareentwicklung organisieren, sich an Änderungen an Anforderungen anpassen und Software veröffentlichen. Da kontinuierliche Integration (Link führt zu einer Webseite außerhalb von IBM) und agile Entwicklung (PDF, 153 KB) viele der gleichen Funktionen (z. B. Testautomatisierung) teilen, macht es Sinn, über kontinuierliche Integration und agile Entwicklung gleichzeitig zu sprechen. Die agile Entwicklung organisiert die Entwicklung in kleinere Gruppen von Arbeitsaufgaben oder Sprints. Wenn diese kombinierten Verfahren in DevOps angewendet werden, tragen sie dazu bei, die Qualität der Software und die Flexibilität des Projekts zu gewährleisten.

Kontinuierliche Integration erfordert, dass das Arbeitsprodukt häufig integriert wird, oft viele Male pro 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 Ausweitung der Schnelltests um Laufzeittests in einer automatisierten Testumgebung führt ganz natürlich zur kontinuierlichen Lieferung.

Die agile Entwicklung (Link führt zu einer Webseite außerhalb von IBM) ist ebenfalls iterativ und passt sich an Änderungen an, damit Lösungen im Laufe der Zeit skaliert und weiterentwickelt werden können. Im Kontext der kontinuierlichen Integration geht es bei der agilen Softwareentwicklung darum, Software-Iterationen zu liefern, die darauf basieren, wie der Wert der Features bei der kontinuierlichen Integration priorisiert wird.

DevOps

Im DevOps-Framework steht die kontinuierliche Integration am Anfang des Softwareentwicklungsprozesses, wobei Code mindestens einmal täglich eingecheckt wird, um zu verhindern, dass Ihre lokalen Kopien zu weit vom Hauptzweig des Code-Builds „wegdriften". Dies hilft Ihnen, katastrophale Konflikte bei der Zusammenführung zu vermeiden, die den Build „zerstören" könnten und deren Bereinigung das Team Stunden oder sogar Tage kosten könnten.

Kontinuierliche Integration ist die Voraussetzung für die Test-, Bereitstellung- und Release-Stufen der kontinuierlichen Lieferung. Das gesamte Entwicklerteam weiß innerhalb weniger Minuten nach dem Check-in, ob schlechter Code geschrieben wurde, da der kontinuierliche Integrationsservice Codeänderungen automatisch erstellt und auf Fehler testet.

Open-Source-Tools für die kontinuierliche Integration

Die folgenden sind einige der beliebtesten Tools für die kontinuierliche Integration:

  • Jenkins: Jenkins ist ein weit verbreitetes Open-Source-Tool für die kontinuierliche Integration und ermöglicht es Entwicklern, Code automatisch zu erstellen, zu integrieren und zu testen, sobald sie ihn in das Quellcode-Repository festgeschrieben haben. So können Entwickler Fehler frühzeitig erkennen und Software schneller bereitstellen. Das Docker-Plug-in ist auf Jenkins verfügbar.
  • Buildbot: Mit Buildbot können alle Aspekte des Softwareentwicklungszyklus automatisiert werden. Als Job-Planungssystem stellt es Jobs in die Warteschlange, führt sie aus und meldet die Ergebnisse zurück.
  • Go: Was Go besonders macht, ist das Konzept von Pipelines, das die Modellierung von komplexen Build-Workflows einfach macht.
  • IBM UrbanCode Build
  • Travis CI: Als eine der ältesten und bewährtesten gehosteten Lösungen ist Travis CI auch in einer On-Premises-Version für Unternehmen erhältlich.
  • GitLab CI: Als integraler Bestandteil des Open-Source-Projekts Rails ist GitLab CI ein kostenloser, gehosteter Dienst, der eine detaillierte Verwaltung des Git-Repositorys mit Funktionen wie Zugriffskontrolle, Fehlerverfolgung, Code-Reviews und mehr bietet.

Die Durchführung der kontinuierlichen Integration mithilfe von Open-Source-Tools bietet viele Vorteile, darunter die folgenden:

  • Hunderte von Plug-ins, die Ihr Projekt unterstützen können
  • Breite Unterstützung für Open-Source-Sprachen, wie Python, Java und JavaScript
  • Kostenlos, so dass Studenten, Startups und Entwickler, die nebenbei arbeiten, ein leistungsstarkes Tool erhalten, das das Budget schont
  • Anpassungsfähigkeit, die es Entwicklern ermöglicht, das Fundament eines CI-Tools zu übernehmen, auf diesem Fundament aufzubauen und das Tool auf die eigenen Bedürfnisse zuzuschneiden
  • Die Möglichkeit, die Tools zu ändern und weiterzugeben

Open-Source-Tools für die kontinuierliche Integration, die Sie für Ihren Softwareentwicklungsworkflow berücksichtigen sollten: Jenkins, Go, Buildbot und Travis CI, über die Sie im nächsten Abschnitt lesen können.

Anwendungsfall

Der folgende hypothetische Anwendungsfall veranschaulicht, wie zwei Softwareentwickler die kontinuierliche Integration dazu nutzen können, ihren DevOps-Prozess zu verbessern.

Die beiden Entwickler müssen miteinander kommunizieren, 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. Ein automatisches System zur kontinuierlichen Integration ist daher erforderlich.

Das Aushandeln, wann diese Kombinationen und Tests stattfinden sollten, würde ebenfalls eine Menge Entwicklungszeit verschlingen.

Dazu müssten sich die Entwickler auf die folgenden Punkte einigen:

  1. Wann soll mit der Codeintegration begonnen werden?
  2. Wie soll getestet werden, dass die Integration erfolgreich war?
  3. Wie sollen die Ergebnisse an das Team kommuniziert werden?

Plattformen für die kontinuierliche Integration bieten Standardantworten auf diese Fragen und die meisten ermöglichen außerdem spezifische Konfigurationen und Einstellungen.

In der Regel beginnen CI-Plattformen wie Jenkins Integrationstests mit dem Check-in. Wenn der neue Code eingecheckt wird, führt das CI-System eine Reihe von Tests aus, die Komponententests und Regressionstests enthalten können, und ermitteln dann, ob der Code erfolgreich integriert wurde.

Oder, wenn eine kompilierte Sprache verwendet wird, gilt der Standardtest als erfolgreich abgeschlossen, nachdem 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 Ihren eigenen Integrationstest erstellen.

Aber in jedem Fall protokollieren die meisten CI-Systeme die Integrationsversuche, die Erfolgsrate und andere Metriken.

Server

Ein Server für die kontinuierliche Integration ist ein Software-Tool, das alle Ihre Abläufe in Bezug auf die kontinuierliche Integration zentralisiert und Ihnen eine zuverlässige, stabile Plattform bietet, um Ihre Projekte zu erstellen. Sie können CI-Server konfigurieren und anpassen, um verschiedene Projekte für verschiedene Plattformen zu erstellen. Ein Server für die kontinuierliche 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 Server für die kontinuierliche Integration bietet die Möglichkeit, folgende Abläufe auszuführen:

  • Ausführen automatischer Builds, Tests und Releases an einem einzigen Ort
  • Bereitstellung jeder beliebiger Version, jederzeit
  • Beibehaltung einer „ordentlichen" Konfiguration
  • Unterstützung von Plug-ins zur Verbesserung der Funktionalität
  • Überwachung des Repositorys Ihres Projekts
  • Einbeziehung von Änderungen und Ausführen von Aufgaben, die Sie für eine erfolgreiche Festschreibung definiert haben
  • Versenden von Feedback mit Details zum Build an die relevanten Projektmitglieder

Testen ist wichtig!

Kontinuierliches Testen beginnt, wenn Sie in der kontinuierlichen Integration einen Build und ein Paket erstellen (auch als installierbare Entität oder Paketentität bezeichnet). Die Tests werden gestoppt, wenn das verpackte Element in die Produktion geht. Jeder Schritt, vom Anfang bis zum Ende des Prozesses, beinhaltet eine Testsuite.

Wenn Sie nur eine Testphase haben, besteht mindestens 30 Prozent der kontinuierlichen Integration aus Testen. 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. Heute aber können Sie automatisierte Tests verwenden – der Schlüsselfaktor für eine erfolgreiche kontinuierliche Integration.

Im Rahmen der Automatisierung von Tests für die kontinuierliche Integration erstellt die testgesteuerte Entwicklung iterativ Code und testet jeweils einen Anwendungsfall, um Testabdeckung zu gewährleisten, Codequalität zu verbessern und das Fundament für die kontinuierliche Bereitstellung zu legen. 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 effektive Regressionstests helfen können, unwillkommene Überraschungen zu vermeiden.

Kontinuierliche Integrations-Pipeline

Eine kontinuierliche Integrations-Pipeline automatisiert die verschiedenen Stadien einer Projekt-Pipeline – wie z. B. Builds, Tests und Bereitstellungen – in wiederholbarer Weise und mit minimalem menschlichem Zutun. Eine automatisierte kontinuierliche Integrations-Pipeline ist von wesentlicher Bedeutung, um die Entwicklung, das Testen und die Bereitstellung Ihrer Anwendungen zu optimieren, da sie Kontrollen, Prüfpunkte und höhere Geschwindigkeit ermöglicht.

Best Practices

Der kontinuierliche Integrationsprozess ist eine kritische Komponente von DevOps, mit der Sie Ihre Teams in Entwicklung und Betrieb in ein gemeinsam genutztes Repository für Codierung, Testen, Bereitstellung und Unterstützung von Software einbinden können. Im Folgenden sind einige CI-Best Practices enthalten, die Ihnen helfen können, erfolgreich zu sein:

  • Verwaltung eines einzigen Repositorys für den Quellcode: Setzen Sie das Werkzeug von Quellcodekontrolle und -management ein, um alle Dateien zum Erstellen eines Produkts zu verfolgen und Kontrolle über sie zu behalten. Diese konsolidierte Codebasis erleichtert die Weitergabe und verbessert die Sichtbarkeit.
  • Automatisierung des Builds: Hierbei handelt es sich um die Kompilierung, Verknüpfung und andere Prozesse, die die Build-Artefakte erzeugen. Selbsttests sollten ebenfalls automatisiert werden.
  • Einsatz täglicher Festschreibungen: Zwingen Sie Ihre Entwickler dazu, ihre Änderungen mindestens einmal täglich in den Hauptstrom der Entwicklungsdaten festzuschreiben. Jeder Entwickler muss überprüfen, ob seine Arbeitskopie mit dem Hauptstrom der Entwicklungsdaten konsistent ist.
  • Testen in einem Klon der Produktionsumgebung: Gestalten Sie die Testumgebung so ähnlich wie möglich zu Ihrer endgültigen Produktionsumgebung.
  • Automatisierte Bereitstellung: Implementieren Sie mehrere Umgebungen (Entwicklung, Integration, Produktion), um Builds und Tests auszuführen.

Kontinuierliche Integration und IBM Cloud®

Der IBM Ansatz besteht darin, Projekte zu definieren und zu automatisieren und Sicherheit mithilfe von Vorlagen zu konfigurieren. Wenn eine Änderung an einer Bibliothek vorgenommen wird, werden abhängige Anwendungen neu erstellt und verbunden, verknüpft oder „zurückgebunden". Das Verständnis von Anwendungsabhängigkeiten wird Ihnen dabei helfen, Ihre Anwendungen zu modernisieren.

Während Unternehmen die digitale Transformation vorantreiben, steigt die Notwendigkeit der Automatisierung im gesamten Geschäfts- und IT-Betrieb immer weiter. Ein Schritt in Richtung auf mehr Automatisierung sollte mit kleinen, messbar erfolgreichen Projekten beginnen, die Sie dann skalieren und für andere Prozesse und in anderen Teilen Ihrer Organisation optimieren können.

Durch die Zusammenarbeit mit IBM haben Sie Zugriff auf KI-gestützte Automatisierungsfunktionen, einschließlich vorgefertigter Workflows, um Innovationen zu beschleunigen, indem Sie jeden Prozess intelligenter gestalten.

Machen Sie den nächsten Schritt:

– Beginnen Sie damit, Ihre Software-Builds zu verwalten, einschließlich Skalierung und Konfiguration, mithilfe von IBM® UrbanCode® Build.

Lesen Sie in diesem Bericht von HFS Research, welche fünf Dinge für den Automatisierungserfolg unabdingbar sind. (Link führt zu einer Webseite außerhalb von IBM.)

Machen Sie noch heute den ersten Schritt – mit einem IBM Cloud-Konto.