Continuous Integration ist ein Softwareentwicklungsprozess, bei dem Entwickler den neuen Code, den sie geschrieben haben, während des gesamten Entwicklungszyklus häufiger integrieren und ihn mindestens einmal täglich zur Codebasis hinzufügen.
Automatisierte Tests werden für jede Iteration des Builds durchgeführt, um Integrationsprobleme früher zu identifizieren, d. h. zu einem Zeitpunkt, zu dem sie einfacher zu beheben sind. Dieser Ansatz trägt auch dazu bei, Probleme bei der endgültigen Zusammenführung für das Release zu vermeiden. Insgesamt trägt die Continuous Integration dazu bei, den Erstellungsprozess zu rationalisieren, was zu einer qualitativ hochwertigeren Software und vorhersehbareren Bereitstellungsplänen führt.
Der Leitfaden für Unternehmen zur KI und IT-Automatisierung bietet einen detaillierten Einblick in die KI-gestützte IT-Automatisierung. Sie erfahren, warum und wie Sie diese nutzen können, welche Probleme dabei auftreten und wie Sie beginnen können.
Registrieren Sie sich für den TEI-Bericht über IBM Robotic Process Automation
Per Definition beschreibt DevOps einen Softwareentwicklungsprozess und eine Veränderung der Unternehmenskultur. Dieser Prozess beschleunigt die Bereitstellung qualitativ hochwertigerer Software durch die Automatisierung und Integration der Arbeit von Entwicklungs- und IT-Betriebsteams. Traditionell arbeiteten diese beiden Gruppen getrennt voneinander oder in Silos.
In der Praxis gehen die besten DevOps-Prozesse und -Kulturen über die Entwicklung und den Betrieb hinaus. Zu dieser Gruppe gehören Plattform- und Infrastrukturtechnik, Sicherheit, Compliance, Governance, Risikomanagement, Geschäftsbereiche, Endnutzer und Kunden. Die Gruppe bezieht die Beiträge aller Anwendungsstakeholder in die Softwareentwicklung ein.
Im DevOps- Framework steht die kontinuierliche Integration am Anfang des Softwareentwicklungsprozesses. Hier geben Sie Ihren Code mindestens einmal täglich ein, um zu verhindern, dass sich Ihre lokalen Kopien zu weit vom Hauptzweig des Code-Builds entfernen. Dieser Ansatz hilft Ihnen, katastrophale Zusammenführungskonflikte zu vermeiden, die den Build zerstören könnten und für deren Lösung das Team möglicherweise Stunden oder Tage braucht.
Die Continuous Integration dient als Voraussetzung für die Test-, Bereitstellungs- und Release-Phasen der kontinuierlichen Bereitstellung. Das gesamte Entwicklungsteam weiß innerhalb von Minuten nach der Eingabe, ob Sie fehlerhaften Code erstellt haben, da der kontinuierliche Integrationsdienst Ihre Codeänderungen automatisch umsetzt und auf Fehler testet.
Auf die Continuous Integration folgen im DevOps-Zyklus die Continuous Delivery und die Continuous Deployment.
Continuous Delivery (CD) erfasst, wo Continuous Integration endet, und automatisiert die Bereitstellung von Anwendungen in ausgewählten Infrastrukturumgebungen. CD konzentriert sich darauf, alle validierten Änderungen an der Codebasis – Updates, Fehlerbehebungen und sogar neue Funktionen – so schnell und sicher wie möglich an die Benutzer zu liefern. Es gewährleistet die Automatisierung des Push-Code-Änderungen in verschiedene Umgebungen, wie z. B. Entwicklung, Test und Produktion.
In der kontinuierlichen Bereitstellung werden die Codeänderungen an einer Anwendung automatisch in der Produktionsumgebung veröffentlicht. Diese Automatisierung wird durch eine Reihe vordefinierter Tests vorangetrieben. Sobald neue Updates diese Tests bestehen, verteilt das System die Updates direkt an die Benutzer der Software.
Zu den häufig genannten Vorteilen der Continuous Integration gehören:
Bei der flexiblen Softwareentwicklung geht es darum, wie Softwareentwicklungsteams sich selbst organisieren, sich an veränderte Anforderungen anpassen und Software freigeben. Kontinuierliche Integration (Link befindet sich außerhalb von ibm.com) und flexible Entwicklung haben viele der gleichen Funktionen, wie z. B. die Testautomatisierung. Daher kann es sinnvoll sein, gleichzeitig von kontinuierlicher Integration und Flexibilität zu sprechen.
Agilität organisiert die Entwicklung in kleinere Arbeitsgruppen oder Sprints. Bei der Anwendung von DevOps tragen diese kombinierten Praktiken dazu bei, Softwarequalität und Projektflexibilität zu gewährleisten.
Bei der Continuous Integration müssen Sie Ihre Arbeit häufig, oft sogar mehrmals täglich, integrieren. Sie überprüfen die Integration durch einen automatisierten Build, der Integrationsfehler so früh wie möglich erkennt. Der Build sollte Ausführungstests als Teil der Überprüfung umfassen. Die Erweiterung der Schnelltests auf Laufzeittests in einer automatisierten Testumgebung führt auf natürliche Weise zu einer kontinuierlichen Bereitstellung.
Flexible (Link befindet sich außerhalb von ibm.com) ist ebenfalls iterativ und passt sich an Veränderungen an, sodass Lösungen im Laufe der Zeit skaliert und weiterentwickelt werden können. Im Kontext der kontinuierlichen Integration geht es bei der flexiblen Softwareentwicklung darum, Software-Iterationen zu liefern, die darauf basieren, wie Sie den Wert der Funktionen bei der kontinuierlichen Integration priorisieren.
Zu den beliebten Open-Source-Tools für die kontinuierliche Integration gehören:
Die Durchführung einer Continuous Integration mit Open-Source-Tools bietet viele Vorteile, darunter:
Zu den Open-Source-Tools für die 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 mehr lesen können.
Ein Server für Continuous Integration (CI-Server) ist ein Softwaretool, das alle Ihre kontinuierlichen Integrationsvorgänge zentralisiert und Ihnen eine zuverlässige, stabile Plattform zum Erstellen Ihrer Projekte bietet. Sie können CI-Server konfigurieren und anpassen, um verschiedene Projekte für verschiedene Plattformen zu erstellen. Ein CI-Server modelliert und visualisiert auf einfache Weise komplexe Workflows (und ermöglicht so eine kontinuierliche Lieferung) und bietet eine intuitive Schnittstelle für die Erstellung von kontinuierlichen Delivery Pipelines. Mit einem CI-Server können Sie Folgendes tun:
Betrachten Sie einmal diesen hypothetischen Anwendungsfall, der veranschaulicht, wie zwei Softwareentwickler Continuous Integration nutzen können, um ihren DevOps-Prozess zu verbessern.
Die beiden Entwickler müssen miteinander besprechen, welche Funktionen wie funktionieren. Dieses kleine Team benötigt regelmäßige Updates und muss in der Lage sein, seinen Code als Ganzes zu integrieren und zu testen. Das Planen des Eingebens und Testens von Code nimmt viel Entwicklungszeit in Anspruch. Sie brauchen ein automatisches System für Continuous Integration.
Ein Verhandeln darüber, wann diese Kombinationen und Tests stattfinden sollten, würde viel Zeit der Entwickler verschlingen. Sie müssten über Folgendes eine Einigung treffen:
Plattformen zur Continuous Integration haben Standardantworten auf diese Fragen und die meisten ermöglichen eine Konfiguration und Einrichtung.
Normalerweise beginnen CI-Plattformen wie Jenkins mit Integrationstests bei der Eingabe. Wenn neuer Code eingegeben wird, führt das CI-System eine Reihe von Tests durch, die Einheitentests und Regressionstests enthalten können, und bestimmt dann, ob der Code erfolgreich integriert wurde.
Wenn Sie eine kompilierte Sprache verwenden, bezieht sich der Standardtest darauf, ob der Code erfolgreich kompiliert wurde. Wenn nicht, hat der neue Code den Build zerstört. Für Sprachen wie Python oder JavaScript müssen Sie Ihren eigenen Integrationstest erstellen.
In jedem Fall protokollieren die meisten CI-Systeme Integrationsversuche, Erfolgsrate und andere Metriken.
Die Bedeutung des Testens
Kontinuierliches Testen beginnt, wenn Sie einen kontinuierlichen Integrations-Build und ein Paket (auch bekannt als installierbare Entität oder gepackte Entität) erstellen. Es stoppt, wenn diese verpackte Entität in die Produktion geht. Jeder Schritt von Anfang bis Ende umfasst eine Testsuite.
Wenn Sie nur eine Testphase haben, bestehen mindestens 30 % der kontinuierlichen Integration aus Tests. In der Realität bestehen kontinuierliche Integrationsaktivitäten zu 50 bis 70 % aus Tests. Früher mussten Sie die Tests manuell durchführen. Jetzt können Sie automatisierte Tests verwenden – der Schlüssel zur erfolgreichen Continuous Integration.
Im Rahmen der Automatisierung von Tests für die Continuous Integration wird bei der testgetriebenen Entwicklung iterativ Code erstellt und ein Anwendungsfall nach dem anderen getestet. Dieser Ansatz stellt sicher, dass die Tests alles Gewünschte abdecken, verbessert die Codequalität und schafft die Grundlage für eine kontinuierliche Lieferung. Automatisierte Tests geben Aufschluss darüber, ob neuer Code einen oder mehrere der in allen Funktionsbereichen der Anwendung entwickelten Tests nicht bestanden hat.
Eine bewährte Methode erfordert, dass Entwickler alle oder einen Teil der Tests in ihren lokalen Umgebungen ausführen. Diese Vorgehensweise stellt sicher, dass Entwickler den Quellcode erst dann der Versionskontrolle übergeben, wenn die neuen Codeänderungen ihre Tests bestanden haben. Die Erfahrung zeigt, dass effektive Regressionstests helfen können, spätere unliebsame Überraschungen zu vermeiden.
Die Continuous Integration Pipeline
Eine kontinuierliche Integrationspipeline automatisiert Phasen der Projektpipeline – wie Builds, Tests und Einführungen – auf wiederholbare Weise und mit minimalem menschlichen Eingriff. Eine automatisierte kontinuierliche Integrationspipeline ist unerlässlich, um die Entwicklung, das Testen und die Bereitstellung Ihrer Anwendungen zu optimieren, indem sie Kontrollen, Prüfpunkte und Geschwindigkeit ermöglicht.
Best Practices für die kontinuierliche Integration
Der Continuous Integration Prozess ist eine entscheidende Komponente von DevOps, die Ihnen hilft, für Ihre Entwicklungs- und Betriebsteams ein gemeinsames Repository für die Codierung, das Testen, die Bereitstellung und die Unterstützung von Software bereitzustellen. Zu den Best Practices für CI, die Ihnen zum Erfolg verhelfen können, gehören:
Mit dem IBM UrbanCode Build-Tool, einer auf Unternehmen abgestimmten Build-Management-Lösung, die ein vorlagengestütztes System verwendet, lassen sich Software-Builds einfacher konfigurieren und ausführen.
DevOps beschleunigt die Bereitstellung qualitativ hochwertigerer Software, indem es die Arbeit von Softwareentwicklungs- und IT-Teams kombiniert und automatisiert.
Continuous Delivery automatisiert die Lieferung von Anwendungen an Test- und Produktionsumgebungen.
Ein praktischer Leitfaden zur CI-/CD-Pipeline.