Was ist Continuous Integration?
Steigere mit schnellerem Feedback die Agilität deines Teams. Weil du nicht schneller sein kannst als deine Tests.
Continuous Integration (CI) ist eine Methode zur automatisierten Integration von Codeänderungen, die mehrere Mitarbeiter an einem einzigen Softwareprojekt vornehmen. Es ist eine primäre Best Practice von DevOps, die es Entwicklern ermöglicht, Codeänderungen häufig in einem zentralen Repository zusammenzuführen, in dem Builds und Tests ausgeführt werden. Automatisierte Tools werden verwendet, um die Fehlerfreiheit des neuen Codes vor der Integration zu bestätigen.
Ein Versionskontrollsystem für Quellcodes ist der Knackpunkt des CI-Prozesses. Es ermöglicht weitere Checks, wie z. B. automatisierte Tests der Codequalität und Tools für die Syntaxprüfung.
Einstieg in Continuous Integration
Erfahre, wie du in fünf Schritten Continuous Integration und automatisiertes Testen einführen kannst. Artikel lesen
Fünf Tipps für CI-freundliche Repositorys
Fünf Tipps, um Git und dein Continuous Integration-Tool optimal zu nutzen. Artikel lesen
Tools für Continuous Integration
Fünf Tipps, um Git und dein Continuous Integration-Tool optimal zu nutzen. Artikel lesen
Trunk-basierte Entwicklung
Erfahre mehr über Trunk-basierte Entwicklung – eine Praktik der Versionskontrolle, bei der Entwickler kleine, häufige Aktualisierungen in einem Kern- oder Haupt-Branch ("Trunk") zusammenführen. Artikel lesen
Die Bedeutung von Continuous Integration
Um die Bedeutung von CI zu verstehen, gehen wir zunächst auf einige Problembereiche bei anderen Methoden ein. Ohne CI müssen Entwickler ihre Codebeiträge zum Endprodukt manuell koordinieren und kommunizieren. Die Koordination erstreckt sich über die Entwicklerteams hinweg auch auf das Operations-Team und den Rest des Unternehmens. Produktteams müssen koordinieren, zu welchem Zeitpunkt sie Funktionen und Fehlerbehebungen nacheinander veröffentlichen und welche Teammitglieder jeweils verantwortlich sind.
Der Kommunikationsaufwand einer Umgebung ohne CI kann zu einer komplexen und verworrenen Synchronisationsaufgabe werden. Dabei fallen unnötige Kosten für die Projektverwaltung an. Bei der Integration müssen Entwickler mehr Sorgfalt walten lassen, was letztlich den Code-Release verlangsamt und die Fehlerrate steigert. Diese Risiken wachsen bei größeren Entwicklerteams und Codebasen exponentiell.
Ohne eine solide CI-Pipeline kann sich zwischen Entwicklerteam und dem restlichen Unternehmen eine Kommunikationskluft auftun. Der Austausch zwischen Produkt- und Entwicklerteam kann mühsam sein. Die Entwicklerabteilung wird dann als Blackbox wahrgenommen, an die andere Teams Anforderungen stellen und Features liefern – und von der sie am Ende eventuell das erwartete Ergebnis zurückbekommen. Die Entwickler wiederum können schlechter einschätzen, wann sie eine Anfrage erfüllt haben werden, da die für die Integration neuer Änderungen benötigte Zeit ein ungewisses Risiko darstellt.
Was bringt CI?
Mit CI kannst du deine Entwicklerteams vergrößern und ermöglichst ihnen, mehr Bereitstellungen abzuschließen. Wenn du CI im obigen Szenario einführst, gibst du Entwicklern die Möglichkeit, unabhängig und parallel an Features zu arbeiten. Am Schluss können sie diese Features dann unabhängig und schnell in das Endprodukt mergen. CI hat sich als wertvolle Methode in modernen, erfolgreichen Softwareentwicklungsunternehmen bewährt.
Wie ist CI umsetzbar?
CI wird üblicherweise zusammen mit agilen Softwareentwicklungs-Workflows eingesetzt. Ein Unternehmen stellt eine Liste mit Tasks zusammen, die eine Produkt-Roadmap umfassen. Diese Tasks werden dann unter den einzelnen Softwareentwicklern zur Bereitstellung aufgeteilt. Mithilfe von CI können diese Softwareentwicklungs-Tasks unabhängig voneinander und parallel von den zugewiesenen Entwicklern bearbeitet werden. Sobald einer der Tasks abgeschlossen ist, speist ein Entwickler diesen neuen Code in das CI-System ein, sodass er in das Gesamtprojekt integriert werden kann.
CI, Continuous Deployment und Continuous Delivery
Continuous Integration, Continuous Deployment und Continuous Delivery sind drei Phasen einer automatisierten Software-Release-Pipeline, einschließlich einer DevOps-Pipeline. In diesen drei Phasen wird die Idee einer Software bis hin zur Veröffentlichung an den Endbenutzer entwickelt. Dabei bildet die Integrationsphase den ersten Schritt. Bei der Continuous Integration versuchen mehrere Entwickler, ihre Codeänderungen in das Haupt-Code-Repository eines Projekts zu mergen.
Auf Continuous Integration folgt Continuous Delivery. In der Delivery-Phase wird ein Artefakt-Paket erstellt, um es an den Endbenutzer zu veröffentlichen. Automatisierte Build-Tools erzeugen in dieser Phase das Artefakt. In dieser Build-Phase muss alles in Ordnung sein, d. h. das Artefakt muss dem Endkunden jederzeit bereitgestellt werden können.
Die letzte Phase der Pipeline lautet Continuous Deployment. In der Deployment-Phase wird das Software-Artefakt dem Endbenutzer automatisch bereitgestellt. Zu diesem Zeitpunkt hat das Artefakt die Phasen der Integration und Veröffentlichung erfolgreich durchlaufen. Nun wird das Artefakt automatisch bereitgestellt und verteilt. Dabei wird das Artefakt von Skripts und Tools automatisch an öffentliche Server oder über andere Vertriebswege, wie z. B. App-Stores, verteilt.
Vorteile und Herausforderungen von Continuous Integration
Continuous Integration ist ein wesentlicher Aspekt von DevOps und leistungsstarken Softwareteams. Doch CI bringt nicht nur dem Entwicklerteam, sondern dem gesamten Unternehmen große Vorteile. Mit CI kannst du einen umfassenderen Einblick in den Prozess der Softwareentwicklung und die Bereitstellung erhalten und diese Vorgänge transparenter gestalten. Dadurch sind alle anderen im Unternehmen in der Lage, Markteinführungsstrategien besser zu planen und umzusetzen. Wir wollen dir nun einige allgemeine Vorteile von CI für Unternehmen vorstellen.
Skalierbarkeit
Mit CI können Unternehmen die Größe von Softwareentwicklerteams und Codebasen sowie die Infrastruktur skalieren. CI minimiert den Aufwand, den das Verwalten von Code-Integrationen und die Kommunikation mit sich bringen, und kann so beim Aufbau von DevOps- und agilen Workflows helfen. Dabei können einzelne Teammitglieder bis hin zum Release Inhaber einer neuen Codeänderung sein. CI eliminiert organisatorische Abhängigkeiten bei der Entwicklung einzelner Features und sorgt dadurch für Skalierbarkeit. Entwickler können dann in isolierten Silos an ihren Features arbeiten und haben zugleich Gewissheit, dass sich ihr Code nahtlos in die restliche Codebasis integrieren lässt. Dies ist ein zentraler DevOps-Prozess.
Verbesserte Feedbackschleifen
Schnelleres Feedback zu geschäftlichen Entscheidungen ist ein weiterer großer Vorteil von CI. Mit einer optimierten CI-Plattform können Produktteams zügiger Ideen testen und iterieren. Änderungen lassen sich schneller pushen und auf Umsetzbarkeit überprüfen und Bugs oder andere Vorgänge können rasch in Angriff genommen und behoben werden.
Bessere Kommunikation
CI verbessert die allgemeine technische Kommunikation und Verantwortlichkeit, was eine bessere Zusammenarbeit zwischen Entwicklung und Betrieb in einem DevOps-Team ermöglicht. Indem du Workflows für Pull-Anfragen mit CI verbindest, können Entwickler passiv ihr Wissen miteinander teilen. Anhand von Pull-Anfragen können Entwickler den Code anderer Teammitglieder beobachten und kommentieren. Sie können dann Feature-Branches einsehen und mit anderen Entwicklern an ihnen zusammenarbeiten, während das Feature die CI-Pipeline durchläuft. Mithilfe von CI lassen sich außerdem Ausgaben für QS-Ressourcen einsparen. Eine effiziente CI-Pipeline mit einer zuverlässigen und automatisierten Testabdeckung schützt vor Regressionen und sorgt dafür, dass neue Features bestimmten Vorgaben entsprechen. Vor dem Mergen muss der neue Code sämtliche CI-Assertionstests bestehen, die dazu dienen, neuen Regressionen vorzubeugen.
Die Vorteile von CI überwiegen deutlich die Hürden bei der Einführung. Dennoch solltest du dir der Herausforderungen von CI bewusst sein. Besonders anspruchsvoll ist das Übertragen eines Projekts zu CI, wenn es ohne CI begonnen wurde. Bei den meisten modernen Softwareprojekten lässt sich CI bereits in frühen Phasen einführen, sodass sich die Schwierigkeiten einer späteren Einführung gar nicht erst stellen.
Einführung und Installation
Die Herausforderungen von Continuous Integration liegen vor allem bei der Einführung in den Teams und der anfänglichen Installation. Wenn Teams bisher noch keine CI-Methode nutzen, kann es sie Mühe kosten, eine entsprechende Lösung zu finden und die ersten Schritte zu bewältigen. Bei der Installation einer CI-Pipeline solltest du daher die bestehende technische Infrastruktur in deine Überlegungen einbeziehen.
Vertrautwerden mit Technologien
Die Funktionen von CI sind mit einer Reihe unterstützender Technologien verbunden, mit denen dein Team erst vertraut werden muss. Dazu gehören Versionskontrollsysteme, Hosting-Infrastrukturen und Technologien zur Orchestrierung.
Best Practices für CI
Testorientierte Entwicklung
Sobald du für ein Projekt eine CI-Pipeline mit automatisierter Testabdeckung aufgestellt hast, ist das fortlaufende Weiterentwickeln und Verbessern der Testabdeckung eine bewährte Methode. Zu jedem neuen Feature, das die CI-Pipeline durchläuft, sollte es eine Reihe an Tests geben, mit denen du sicherstellst, dass der neue Code wie erwartet funktioniert.
Im Rahmen der testorientierten Entwicklung werden zunächst der Testcode und die Testfälle erstellt, bevor das Programmieren des eigentlichen Features erfolgt. Bei einer rein testorientierten Entwicklung kann das Produktteam dabei helfen, ein bestimmtes erwartetes Verhalten zu erzielen. Diese Arbeit kann dann in die Testfälle einfließen. Entwickler und Produktteam besprechen in einem rein testorientierten Entwicklungsszenario gemeinsam die Spezifikationen oder Anforderungen. Ausgehend von diesen Anforderungen wird dann eine Checkliste mit Code-Assertionen aufgestellt. Die Entwickler schreiben daraufhin Code, der diesen Assertionen entspricht.
Pull-Anfragen und Code-Reviews
Die meisten modernen Softwareentwicklungs-Teams arbeiten mit Workflows, die Pull-Anfragen und Code-Reviews vorsehen. Pull-Anfragen sind für eine effektive CI-Methode entscheidend. Entwickler erstellen Pull-Anfragen, wenn sie bereit sind, neuen Code in die Haupt-Codebasis zu mergen. Mit der Pull-Anfrage werden andere Entwickler benachrichtigt, dass neue Änderungen zur Integration bereitstehen.
Pull-Anfragen sind der ideale Zeitpunkt, den Startschuss für die CI-Pipeline und die Durchführung der automatischen Genehmigungsschritte zu geben. Zeitgleich zur Pull-Anfrage wird meist noch ein manueller Genehmigungsschritt ergänzt, wobei ein nicht beteiligter Entwickler das Feature einem Code-Review unterzieht. Er ist in der Lage, einen frischen Blick auf den neuen Code und die Funktion zu werfen. Dieser unbeteiligte Entwickler kann Änderungsvorschläge machen und die Pull-Anfrage genehmigen oder ablehnen.
Pull-Anfragen und Code-Reviews sind ein wirkungsvolles Mittel, um eine passive Kommunikation und einen passiven Wissensaustausch innerhalb des Entwicklungsteams zu fördern. Das schützt sie vor technischen Schulden, die durch Wissenssilos verursacht werden. Dabei sind einige wenige Entwickler als Einzige an bestimmten Features einer Codebasis beteiligt.
Optimierte Pipeline-Geschwindigkeit
Die Pipeline ist ein zentraler und häufig genutzter Prozess. Daher ist es wichtig, ihre Geschwindigkeit zu optimieren. Jede noch so kleine Verzögerung im CI-Workflow entwickelt sich bei steigender Anzahl von Feature-Releases und Teammitgliedern sowie zunehmender Codebasis-Größe exponentiell. Es hat sich bewährt, die Geschwindigkeit der CI-Pipeline zu messen und wenn nötig zu optimieren.
Durch schnellere CI-Pipelines kann sich auch die Produkt-Feedbackschleife beschleunigen. Entwickler können Änderungen schnell pushen und mit neuen Feature-Ideen experimentieren, um zu einem besseren Benutzererlebnis beizutragen. Patches können kurzfristig erstellt und Fehler unmittelbar nach der Feststellung behoben werden. Eine verbesserte Geschwindigkeit kann sowohl einen Wettbewerbsvorteil schaffen als auch eine qualitativ höherwertige Kundenerfahrung ermöglichen.
Einstieg in Continuous Integration
Der CI-Methode liegt ein Versionskontrollsystem (VCS, Version Control System) zugrunde. Falls die Ziel-Codebasis einer CI-Lösung nicht über ein VCS verfügt, muss dieses zunächst installiert werden. In modernen Codebasen sind VCS die Regel, wobei Git, Mercurial und Subversion zu den beliebtesten Lösungen zählen.
Sobald die Versionskontrolle installiert ist, steht die Suche nach einer passenden Hosting-Plattform an. In den meisten modernen VCS-Hosting-Tools sind CI-Support und -Features bereits integriert. Beliebte Hosting-Plattformen für die Versionskontrolle sind Bitbucket, Github und Gitlab.
Nachdem das Projekt mit einem Versionskontrollsystem ausgestattet wurde, geht es darum, Schritte zur Integrationsgenehmigung zu bestimmen. Die wertvollste Maßnahme zum Genehmigen von Integrationen sind automatisierte Tests. Wenn du automatisierte Tests in ein Projekt einbringst, kann das anfänglich mit höheren Kosten verbunden sein: Du musst ein Test-Framework installieren, Code testen und Testfälle von Entwicklern aufsetzen lassen.
Es gibt aber auch andere, günstigere CI-Genehmigungsverfahren, wie z. B. Syntaxprüfungen, Codestil-Formatierungen und Scans nach Schwachstellen bei Abhängigkeiten. Wenn du erst einmal ein Versionskontrollsystem einschließlich der Schritte zur Genehmigung von Merges integriert hast, ist deine Continuous-Integration-Lösung startklar!
CI ist kein rein entwicklerspezifischer Unternehmensprozess. Auch für Organisations-, Marketing-, Vertriebs- und Produktteams kann die CI-Pipeline von Nutzen sein. Produktteams müssen sich darüber Gedanken machen, wie Entwicklungsaufgaben, die gleichzeitig bearbeitet werden, parallel laufen können. Produkt- und Entwicklerteams arbeiten dann eng zusammen, um die Erwartungen zu bestimmen, die an geeignete Funktionen gestellt werden und die für die automatisierten Tests zusammengestellt werden.
Marketing und Vertrieb können anhand der CI-Pipeline die kundenseitige Kommunikation koordinieren. CI ermöglicht es allen anderen im Unternehmen, die Fortschritte der Entwicklerarbeit nachzuvollziehen. Dieses Hilfsmittel für mehr Transparenz und bessere Kommunikation lässt sich elegant in Workflows zur agilen Projektentwicklung integrieren.
Fazit
Wenn dein Unternehmen gerne die Vorteile eines DevOps-Ansatzes nutzen möchte oder einfach über ein Softwareteam mit mehreren Entwicklern verfügt, ist CI wichtig. Mit CI können deine Entwickler ihre Aufgaben schneller und effizienter bewältigen.
CI ist in den meisten hoch effizienten Softwareentwicklungs-Unternehmen Standard. Die besten unter ihnen verfügen über solide CI-Pipelines und zögern nicht lange, wenn es um weitere Investitionen für höhere Effizienz geht. In den Genuss der Vorteile von CI kommt schließlich nicht nur das Entwicklerteam, sondern das gesamte Unternehmen.
Es gibt viele Tools von Drittanbietern, die bei der Verwaltung und Installation von CI helfen. Dazu zählen beliebte Lösungen wie etwa Codeship, Bitbucket Pipelines, SemaphoreCI, CircleCI, Jenkins, Bamboo und Teamcity. Zu diesen Tools gibt es Dokumentationsmaterial und Leitfäden zur Einrichtung, die dir bei den ersten Schritten helfen.
Probiere einige der besten CI-Tools von Atlassian aus:
Bitbucket Pipelines ist äußerst hilfreich, um ein Projekt mit modernen CI-Funktionen schnell auf den neuesten Stand zu bringen.
Jira zählt weltweit zu den beliebtesten DevOps-Projektmanagement-Tools. Es lässt sich eng mit anderen Bitbucket-Projekten integrieren. In Kombination mit einer CI-Pipeline ermöglicht es einen transparenten Einblick in die Effizienz der Aufgabenbewältigung eines Unternehmens.
Nächstes Thema
Lesenswert
Füge diese Ressourcen deinen Lesezeichen hinzu, um mehr über DevOps-Teams und fortlaufende Updates zu DevOps bei Atlassian zu erfahren.