Startseite

Themen

Kontinuierliche Integration

Was ist Continuous Integration? 
Erkunden Sie die Lösung zur Continuous Integration von IBM Melden Sie sich für Cloud-Updates an
Abbildung mit Collage von Piktogrammen von Ausrüstung, Roboterarm, Handy

Veröffentlicht: 16 Juli 2024
Mitwirkende: Chrystal R. China, Michael Goodwin

Was ist Continuous Integration?

Kontinuierliche Integration (Continuous Integration, CI) ist ein Softwareentwicklungsprozess, bei dem Entwickler während des gesamten Entwicklungszyklus neuen Code in die Codebasis integrieren.

Wenn der Code übermittelt wird, verifizieren CI-Tools jede Integration, indem sie eine Iteration des Build erstellen und eine Reihe automatisierter Tests durchführen, um Integrationsfehler schneller zu erkennen und zu beheben.

CI wurde als Antwort auf die Herausforderungen der herkömmlichen Softwareentwicklung geschaffen, d. h. die mit der Integration und Bereitstellung verbundenen Prozesse. Bei der herkömmlichen Entwicklung war jeder Entwickler für die manuelle Integration neuen Codes in neue Iterationen einer App oder eines Dienstes verantwortlich, was die Integration zu einem langsamen, fehleranfälligen Prozess machte, insbesondere bei großen Entwicklungsteams.

Verschiedene Codeteile funktionierten nicht immer gut zusammen, und die Entwickler hatten ihre Änderungen zu unterschiedlichen Zeitplänen integriert – manchmal in letzter Minute –, sodass sich das Feedback zu Integrationsproblemen oft verzögerte. Verzögerungen im Zusammenhang mit inkonsistenten Integrationen erschwerten es den Teams herauszufinden, welche Änderung den Fehler verursacht hat, so dass auch das Debuggen zu einem mühsamen Prozess wurde.

Darüber hinaus wurde die Software nur selten getestet und große Batch-Updates wurden auf einmal durchgeführt, so dass Fehler durch die Maschen fielen und sich in der Codebasis ansammeln konnten, was zu Fehlern und Störungen für die Endanwender führte (und die Fehlersuche für Entwickler schwieriger gestaltete).

CI-Tools, die die Grundlage für moderne DevOps-Praktiken, Continuous Integration/Continuous Deployment (CI/CD)-Pipelines und Microservices-Architekturen bilden, helfen bei der Rationalisierung des Build-Prozesses, indem sie schnelles Feedback zur Integrationsleistung liefern.

Bei einem CI-System wird neuer Code zu einem zentralen Repository hinzugefügt (in der Regel mehrmals am Tag), wo er zum Erstellen und Testen verbleibt. Wenn das System einen Fehler entdeckt, versendet es Benachrichtigungen, korrigiert den Code und bestätigt, dass der aktualisierte Code korrekt ist, bevor es ihn vollständig mit der Codebasis zusammenführt.

Folglich ermöglicht der CI-Ansatz den Softwareentwicklungsteams, Fehler zu erkennen und zu beheben, bevor sie sich auf die Softwareleistung auswirken, was zu qualitativ hochwertigerer Software und besser vorhersehbaren Lieferplänen führt.

IBM Software Delivery Report 2023

Bei der Verbesserung der Effizienz der Softwarebereitstellung geht es nicht darum, auf den DevOps-Hype des Marktes zu reagieren, sondern darum, die Erfahrungen und die Produktivität der Entwickler auf der Grundlage Ihrer DevOps-Daten zu verbessern.

Ähnliche Inhalte IBM wurde im Gartner® Magic Quadrant™ 2023 als Marktführer genannt
Wichtige CI-Komponenten und -Prozesse

Während die genaue Konfiguration eines kontinuierlichen Integrationssystems von Team zu Team und von Unternehmen zu Unternehmen unterschiedlich ist, verwendet jedes CI-System bestimmte Komponenten und Prozesse, um Integrationsaufgaben zu optimieren.

Zentrale Quellcode-Repositorys

CI beginnt mit einem zentralen Repository, in das alle Entwickler ihren Code übertragen. Zentrale Repositorys dienen als Eckpfeiler der CI-Praktiken und werden oft von Versionskontrollsystemen (VCS) wie Git und Bitbucket verwaltet. Wenn Entwickler Änderungen einreichen, werden sie im zentralen Repository nachverfolgt und es wird eine vollständige Historie der Codeänderungen erstellt, die die Entwicklungsteams zur effizienteren Zusammenarbeit nutzen können.

Repositorys verwenden außerdem Branching-Strategien wie Trunk-basierte Entwicklung oder GitFlow, um eine parallele Entwicklung zu erleichtern. Branching ermöglicht es Entwicklern, zur Isolierung ihrer Arbeit Funktionszweige und kurzlebige Zweige zu erstellen, bevor diese dann wieder mit dem Zweig des Hauptcodes zusammengeführt werden.

Server für die kontinuierliche Integration

CI-Server, die für die Erstellung verschiedener Projekte für verschiedene Plattformen konfiguriert werden können, zentralisieren alle CI-Vorgänge und bieten eine stabile, zuverlässige Plattform für die Softwareentwicklung. Sie modellieren und visualisieren Workflows (für Continuous Delivery – CD) und bieten eine intuitive Oberfläche für den Aufbau von CD-Pipelines.

CI-Server führen auch automatisierte Builds, Tests und Freigaben durch, orchestrieren Versionskontrollprotokolle, überwachen Code-Repositorys, erstellen Statusberichte und unterstützen Plug-ins, die die Systemfunktionen erweitern können.

Code-Integration

CI-Systeme ermutigen Entwickler, mehrmals täglich Codeänderungen weiterzugeben und dabei kleine, gezielte Änderungen an bestimmten Aufgaben oder Funktionen zu priorisieren. Mithilfe von Tools wie Pull Requests (Beschreibung) und Merge Requests können Teams Code-Reviews einleiten und Probleme besprechen, bevor sie neuen Code zusammenführen. Dadurch werden Fehler frühzeitig erkannt.

Automatisierung aufbauen

Server und Tools für kontinuierliche Integration (einschließlich beliebter Open-Source CI-Tools wie Jenkins, CircleCI, GitHub, AWS CodePipeline und GitLab CI) überwachen das zentrale Repository auf Codeänderungen. Wenn sie eine neue Änderung erkennen, lösen Build-Server den Build-Prozess aus und führen vordefinierte Workflows und Build-Skripte aus. Sie kompilieren und verpacken den Code, um ihn auf das Testen und schließlich auf die Bereitstellung vorzubereiten.

Automatisierte Tests

CI-Tools führen eine Reihe von Tests durch, um den Code zu validieren, bevor er mit der Codebasis zusammengeführt wird. Unit-Tests validieren einzelne Komponenten oder Funktionen und liefern sofortiges Feedback zum Codeverhalten. Integrationstests bewerten die Interaktionen zwischen Softwarekomponenten und -modulen, um sicherzustellen, dass sie korrekt zusammenarbeiten, und um Fehler aufzudecken, die in Unit-Tests möglicherweise übersehen wurden.

In einigen CI-Workflows wird die Software durch End-to-End-Tests validiert, indem Anwenderinteraktionen simuliert werden, um zu überprüfen, ob sich die Software aus der Sicht eines Anwenders korrekt verhält. Teams können auch Codequalitätstests und statische Analysen durchführen, um die Reaktionsfähigkeit und Stabilität der Anwendung unter Last zu überprüfen und Verstöße gegen Codierungsstandards und Sicherheitslücken zu identifizieren.

Feedback-Mechanismen und Artefaktmanagement

CI-Server benachrichtigen Entwickler sofort, wenn ein Build oder Test fehlschlägt. Im Falle eines Ausfalls priorisieren die Entwickler die Reparatur des Codes, um sicherzustellen, dass der Hauptzweig bereitstellbar bleibt.

Wenn ein Build erfolgreich ist, erzeugen die Server Artefakte (z. B. kompilierte Binärdateien, Docker-Images und Installer), die versioniert und in Artefakt-Repositorys für zukünftige Tests und Bereitstellungen gespeichert werden. Unabhängig vom Ergebnis protokollieren führende CI-Systeme Integrationsversuche, Erfolgsraten und andere Metriken, um sicherzustellen, dass Teammitglieder jederzeit auf eine umfassende Versionsdokumentation zugreifen können. 

Die Bedeutung des Testens von Code in CI

Tests sind ein wichtiger Bestandteil kontinuierlicher Integrationsprozesse. Tests machen mindestens ein Drittel der CI-Aktivitäten aus, aber das gilt nur, wenn Teams eine einzige Testphase durchführen. In der Realität können Testaktivitäten den Großteil der Arbeitslast für CI-Tools ausmachen. 

Kontinuierliches Testen in einer CI-Umgebung beginnt, wenn ein Entwickler einen Build und ein Paket erstellt (auch bekannt als installierbare Entität oder verpackte Entität) und endet, wenn das Paket in Produktion geht. Jeder Schritt, von Anfang bis Ende, umfasst die Testsuite.

Im Rahmen des automatisierten Testprozesses in CI erstellt die testgetriebene Entwicklung iterativen Code und testet ihn jeweils für einen Anwendungsfall. Daraufhin werden die Teams darüber benachrichtigt, wie der Code in den verschiedenen Funktionsbereichen der Anwendung funktioniert hat.

Es ist jedoch wichtig, dass die Entwickler alle Tests – und Teile von Tests – in ihrer lokalen Umgebung ausführen, um sicherzustellen, dass sie den Quellcode erst dann der Versionskontrolle übergeben, wenn die Tests der neuen Codeänderungen erfolgreich waren. Dieser Ansatz maximiert die Testabdeckung, verhindert eine Code-Regression und legt den Grundstein für Continuous Delivery. 

Kontinuierliche Integration in DevOps

Im DevOps-Framework steht die kontinuierliche Integration am Anfang des Softwareentwicklungsprozesses. DevOps-Pipelines beschleunigen die Bereitstellung hochwertiger Software, indem sie die Bemühungen von Entwicklungs- und IT-Betriebsteams, die früher nur in ihrer eigenen Welt lebten, automatisieren und kombinieren.

Die besten DevOps-Prozesse und -Kulturen gehen über die Entwicklung und den Betrieb hinaus und umfassen Plattform- und Infrastrukturtechnik, Sicherheit, Compliance, Governance, Risikomanagement, Geschäftsbereiche, Endnutzer und Kunden. Das bedeutet, dass gute DevOps die Beiträge aller Anwendungsstakeholder in den Softwareentwicklungslebenszyklus einbeziehen sollte.

Als Teil von DevOps ermöglicht CI den Entwicklern, ihren Code mindestens einmal am Tag zu überprüfen, um zu verhindern, dass die lokalen Kopien sich zu weit vom Hauptzweig des Code-Builds entfernen. Dieser Ansatz hilft Teams, katastrophale Zusammenführungskonflikte zu vermeiden, die den Build in den Liefer- und Bereitstellungsphasen zerstören könnten.

CI im Vergleich zu Continuous Delivery und Continuous Deployment

Die kontinuierliche Integration ist die erste Station in der CI/CD-Pipeline, gefolgt von Continuous Delivery- und Continuous Deployment-Prozessen (kontinuierliche Bereitstellung).

Continuous Delivery (CD) setzt dort an, wo die kontinuierliche Integration aufhört, und automatisiert die Bereitstellung von Anwendungen und validierten Codebasisänderungen (Updates, Bugfixes und sogar neue Funktionen) in allen notwendigen Umgebungen für die Entwicklung, das Testen und letztendlich die Bereitstellung an Endnutzer. CD-Prozesse sorgen dafür, dass die Build-Phase „grün“ bleibt, so dass die Artefakte jederzeit bereitgestellt werden können.

Bei der kontinuierlichen Bereitstellung (der letzten Phase von DevOps) werden Codeänderungen automatisch in der Produktionsumgebung freigegeben und an den Endnutzer verteilt. Zu diesem Zeitpunkt haben die Code-Änderungen alle Testprotokolle bestanden und sind daher sicher und bereit für die öffentliche Nutzung. CI-Skripte oder -Tools verschieben dann das Software-Artefakt auf öffentliche Server oder Verteilungsplattformen (z. B. Anwendungsspeicher) und verteilen das Update an die Endnutzer.

Kontinuierliche Integration in der flexiblen Entwicklung

Kontinuierliche Integration und flexible Entwicklung haben viele gleiche Funktionen, einschließlich der Testautomatisierung. Daher kann es nützlich sein, zu schauen, wie die beiden interagieren.

In einer flexiblen Entwicklung wird der Entwicklungsprozess in kleineren Arbeitsgruppen oder „Sprints“ organisiert, um Barrieren zu minimieren, die Zusammenarbeit von Entwicklern zu ermöglichen und die Softwarebereitstellung zu beschleunigen. Flexible Methoden tragen der Tatsache Rechnung, dass Softwareentwicklungspraktiken und Kundenbedürfnisse dynamisch sind und diese sich wahrscheinlich im Laufe der Zeit ändern.  

Flexibilität bietet somit einen iterativen Entwicklungsansatz, wodurch sich Teams und Unternehmen leichter an Veränderungen anpassen und Softwarelösungen im Laufe der Zeit skalieren und weiterentwickeln können. Und da CI häufige Aktualisierungen und Codevalidierungen fördert, ermöglicht es flexiblen Teams auch, hochwertige Produkte noch schneller zu veröffentlichen. So entsteht eine inhärent flexible Praxis.

Best Practices für die kontinuierliche Integration

Kontinuierliche Integration hilft DevOps-Teams, sich bei der Codierung, dem Testen, der Bereitstellung und der Unterstützung von Software auf ein gemeinsames Repository zu verlassen. Es gibt jedoch noch einige zusätzliche Schritte für ein Unternehmen, um den Prozess zu optimieren. Zu den häufig implementierten Best Practices für CIs gehören:

Pflege eines einzigen Quellcode-Repositorys

Eine konsolidierte, zentralisierte Codebasis kann die Verteilung und Transparenz vereinfachen. Viele Unternehmen nutzen die Quellcodeverwaltung, um ein einziges Repository zu verwalten, das alle mit einem Produkt-Build verknüpften Dateien verfolgt und steuert.

Verwendung täglicher Mainline-Commits

Unternehmen können eine Kultur der Konsistenz schaffen, indem sie von den Entwicklern verlangen, ihre Änderungen mindestens einmal täglich in den Hauptentwicklungsstream zu übertragen. Damit können Entwickler auch überprüfen, ob ihre Arbeitskopie mit dem Hauptentwicklungsstream übereinstimmt.

Aufrechterhaltung eines schnellen, effizienten Build-Prozesses

Die Optimierung von Build-Skripten, die Parallelisierung von Aufgaben und die Verwendung von Caching-Mechanismen können die Build-Zeiten verkürzen. Teams können CI-Pipelines auch so konfigurieren, dass neue Integrationen, sollten sie Fehler enthalten, schon früh im Prozess fehlschlagen. So können Entwickler Probleme schnell beheben und verbringen weniger Zeit mit der Fehlersuche.

 

 

Testen in einem Klon der Produktionsumgebung

Wenn die Testumgebung der endgültigen Produktionsumgebung so ähnlich wie möglich ist, kann sichergestellt werden, dass die Testergebnisse eine genaue Darstellung der Leistung der Software in der realen Welt liefern.

Verlassen auf Feature Flags

Die Implementierung von Feature Flags zur Kontrolle der Veröffentlichung neuer Funktionen ermöglicht es CI-Systemen, unvollständige oder experimentelle Funktionen im Hauptzweig zusammenzuführen, ohne das Gesamtprodukt zu beeinträchtigen.

Häufiges Überprüfen der CI-Pipeline

Durch die regelmäßige Überprüfung und Aktualisierung der CI-Pipeline, um neue Tools, Technologien und Best Practices einzubeziehen, kann die Pipeline mit den Anforderungen eines Projekts weiterentwickelt werden.

Vorteile der Continuous Integration

Das Einrichten einer robusten CI-Pipeline – insbesondere im Rahmen von DevOps und flexibler Entwicklung – erfordert sorgfältige Planung und Konfiguration, einschließlich der Auswahl der richtigen Tools, der Definition von Build- und Test-Workflows und der Konfiguration der Infrastruktur. CI-Pipelines müssen auch regelmäßig gewartet werden, um Änderungen in der Codebasis, Abhängigkeiten (wie APIs) und die Infrastruktur zu berücksichtigen.

Die Implementierung von CI kann Softwareentwicklungsteams jedoch eine Reihe von Vorteilen bieten, darunter:  

Frühere, effizientere Fehlererkennung

CI-Prozesse ermöglichen es Teams, Fehler frühzeitig zu beheben – manchmal innerhalb von Minuten nach dem Check-in.

Bessere Teamarbeit

Jeder im Team kann Code ändern, Codeänderungen integrieren und Codeinkompatibilitäten und Integrationsfehler identifizieren. Dies vereinfacht den Wissensaustausch und verbessert die Code- und Softwarequalität durch Peer-Feedback.

Beschleunigte Softwareentwicklung

Da laufend neuer Code integriert wird, verbringen die Teams weniger Zeit mit der Integration und dem Testen großer Code-Batches. Und dank der beschleunigten Feedbackschleife, die CI-Tools bieten, können Entwickler Software-Updates und neue Produkte schneller iterieren und für Endbenutzer bereitstellen.

Reduziertes Risiko im Entwicklungsprozess

Durch häufige Übertragungen von Codes sind die Änderungen kleiner und inkrementeller und somit leichter zu verstehen, zu überprüfen und zu testen. Dies verringert das Risiko, dass während der Entwicklung erhebliche Fehler in die Codebasis eingeschleust werden.

Weiterführende Lösungen
IBM DevOps Build

IBM® DevOps Build ist ein verteiltes, plattformübergreifendes Build-Management-Tool zum Konfigurieren und Ausführen von Software-Builds. 

IBM UrbanCode Build erkunden DevOps-E-Book herunterladen
IBM DevOps-Lösungen

Nutzen Sie leistungsstarke DevOps-Software für die Erstellung, Bereitstellung und Verwaltung von sicherheitsrelevanten, cloudnativen Anwendungen auf mehreren Geräten, in verschiedenen Umgebungen und Clouds.

DevOps-Lösungen von IBM erkunden IBM DevOps-Lösungen testen
IBM Cloud Continuous Delivery

Mit IBM® Cloud Continuous Delivery können Teams unternehmenstaugliche DevOps implementieren, sichere Toolchains zur Unterstützung von Aufgaben bei der App-Bereitstellung erstellen und Builds, Tests, Bereitstellungen und vieles mehr automatisieren.

IBM Cloud Continuous Delivery kennenlernen IBM Cloud Continuous Delivery testen
Ressourcen Was ist DevOps?

DevOps beschleunigt die Bereitstellung höherwertiger Software, weil es die Arbeit von Softwareentwicklungs- und IT-Betriebsteams kombiniert und automatisiert.

DevOps für Hybrid Cloud aus Sicht von IBM

Wie DevOps für die Hybrid Cloud Unternehmen dabei helfen kann, die Digital Reinvention erfolgreich zu gestalten.

Was sind CI/CD und die CI/CD-Pipeline?

Lesen Sie einen praktischen Leitfaden zum Verständnis der CI/CD-Pipeline.

Was ist Continuous Delivery?

Continuous Delivery ist eine Praxis, die Entwicklungsteams verwenden, um den Software-Release-Prozess zu automatisieren.

Was ist digitale Transformation?

Die digitale Transformation ist eine strategische Initiative, die digitale Technologie in allen Bereichen eines Unternehmens einbezieht.

Was ist Java?

Java ist eine weit verbreitete objektorientierte Programmiersprache und Softwareplattform. Die Regeln und die Syntax von Java orientieren sich an den Sprachen C und C++.

Was ist CI/CD und die CI-/CD-Pipeline?

Ein praktischer Leitfaden zur CI-/CD-Pipeline.

Machen Sie den nächsten Schritt

Sind Sie bereit für DevOps? Um Software und Services mit der vom Markt geforderten Geschwindigkeit bereitzustellen, müssen Teams schnell iterieren und experimentieren, regelmäßig neue Versionen bereitstellen und sich von Feedback und Daten leiten lassen. Die erfolgreichsten Cloud-Entwicklungsteams setzen auf moderne DevOps-Kultur und -Praktiken sowie cloudnative Architekturen und stellen Toolchains aus erstklassigen Tools zusammen, um ihre Produktivität zu steigern.

DevOps-Lösungen erkunden Kostenfrei ausprobieren