Definition von CI/CD
CI/CD steht für die kombinierten Praktiken der kontinuierlichen Integration (Continuous Integration, CI) und kontinuierlichen Auslieferung (Continuous Delivery, CD), die es DevOps-Teams ermöglichen, Code-Änderungen regelmäßig, zuverlässig und schnell auszuliefern. Im Mittelpunkt von CI/CD steht die Automatisierung des gesamten Entwicklungslebenszyklus (Entwicklung, Tests, Bereitstellung). Durch den Wegfall des manuellen Aufwands im herkömmlichen Entwicklungsprozess können Code-Freigaben in kürzeren Abständen und mit weniger Bugs bzw. Sicherheitsschwachstellen erfolgen.
Die Unterschiede zwischen kontinuierlicher Integration, kontinuierlicher Auslieferung und kontinuierlicher Bereitstellung
Was ist kontinuierliche Integration?
Bei der kontinuierlichen Integration werden Code-Änderungen in ein gemeinsam genutztes Quellcode-Repository integriert. Nach dem Committen werden sie meist automatisch getestet. Die kontinuierliche Integration erfolgt, während die Entwickler den Code schreiben und nicht erst danach.
Der wichtigste Vorteil von CI gegenüber der zeitversetzten Integration sind die erheblich geringeren Risiken. Ihr Team behält immer den Überblick über die Prozesse: Sie wissen, was funktioniert und was nicht, welche Bugs behoben werden müssen und was die anderen Teamkollegen gerade tun. Auf diese Weise kann im Software-Entwicklungsprozess sehr viel früher festgestellt werden, ob etwas schief läuft. Zudem verringert CI die Wahrscheinlichkeit für Code-Konflikte deutlich, da die Arbeit mehrerer Entwickler regelmäßig zusammengeführt wird.
Was ist kontinuierliche Auslieferung?
Kontinuierliche Auslieferung ist eine Erweiterung der kontinuierlichen Integration, bei der Ihr Team automatisch neuen Code in ein Repository (z. B. GitHub) einspielt. Dieser Code kann dann je nach dem Bedarf Ihres Unternehmens und Ihrer Kunden in der Produktionsumgebung bereitgestellt werden. Die verstärkte Automatisierung bei der kontinuierlichen Auslieferung verringert den Bereitstellungsaufwand erheblich und ermöglicht es Ihnen, schneller auf Ereignisse wie Änderungen auf dem Markt oder Sicherheitslücken zu reagieren.
Damit die kontinuierliche Auslieferung reibungslos funktioniert, benötigen Sie einen äußerst zuverlässigen Integrationsserver und erhebliche Hardware-Investitionen. Zudem muss sich Ihr DevOps-Team vom manuellen Testen auf automatisierte Tests umstellen, was für viele Unternehmen eine große Hürde darstellt.
Was ist kontinuierliche Bereitstellung?
Kontinuierliche Bereitstellung ist die fortschrittlichste Stufe der CI/CD-Pipeline. Der Unterschied zwischen der kontinuierlichen Bereitstellung und der kontinuierlichen Auslieferung ist, dass die kontinuierliche Bereitstellung die Prozesse der Code-Freigabe für die Produktion automatisiert. Kontinuierliche Bereitstellung funktioniert nur, wenn viele Ressourcen für automatisierte Tests zur Verfügung stehen, da die manuelle Kontrolle vor der Codebereitstellung entfällt.
Ebenso wie bei der kontinuierlichen Auslieferung und Integration fallen für die kontinuierliche Bereitstellung hohe Anschaffungskosten an. Sie profitieren jedoch von nahezu sofortigem Benutzerfeedback und dem deutlich kürzeren Latenzzeitraum zwischen der Erstellung und der Freigabe des Codes.
Die CI/CD-Pipeline
Mit der Umstellung auf eine Umgebung mit kontinuierlicher Integration und Auslieferung müssen Sie die Sicht auf Ihr Unternehmen grundlegend ändern. Der erste Schritt zur Umsetzung dieser Veränderungen besteht darin, sich ein besseres Verständnis über die CI/CD-Pipeline anzueignen, sodass Sie die in Ihrem Unternehmen erforderlichen Anpassungen vornehmen können.
Grundlegendes zu CI/CD-Pipeline
Die CI/CD-Pipeline ist eine Abfolge von Prozessen, die Ihre bevorzugte Kombination von kontinuierlicher Integration, Auslieferung und Bereitstellung ermöglichen, und bildet die Grundlage für die Abläufe Ihres DevOps-Teams. In der Regel achtet der Teamleiter des DevOps-Teams darauf, dass die Pipeline ordnungsgemäß funktioniert.
Komponenten einer CI/CD-Pipeline
Jede CI/CD-Pipeline sieht je nach den spezifischen Anforderungen und Ressourcen Ihres Teams anders aus, doch im Allgemeinen besteht sie aus vier Phasen.
- Entwickeln: In dieser Phase rufen Sie den Quellcode aus dem Repository ab und stellen die Komponenten zu einem binären Artefakt zusammen. Die von Ihnen gewählte integrierte Entwicklungsumgebung (Integrated Development Environment, IDE) kann die Entwickler bei der Automatisierung dieses Prozesses unterstützen.
- Testen: Bei der CI/CD-Pipeline sollten Sie so oft wie möglich kontinuierlich testen. Unit-Tests helfen dabei, zu überprüfen, ob neue Funktionen wie gewünscht funktionieren, weshalb diese Tests am häufigsten durchgeführt werden sollten. Mit Regressionstests wird sichergestellt, dass Code-Änderungen nicht die vorhandene Infrastruktur zerstören.
- Ausliefern: Nach Abschluss der Tests sollten Ihre Entwickler zu einer Stagingumgebung wechseln, in der sie A/B-Tests durchführen, verbleibende Fehler aufspüren und das QA-Team auf Problemstellen hinweisen können.
- Bereitstellen: Wenn das Build alle automatisierten Tests bestanden hat, kann es in der Produktionsumgebung bereitgestellt werden. Bei der kontinuierlichen Auslieferung wird das Build zur Abnahme an einen Menschen geschickt, während es bei der kontinuierlichen Bereitstellung automatisch bereitgestellt wird.
Zweck der CI/CD-Pipeline
Für Ihr Entwicklungsteam gibt es möglicherweise viele Gründe für die Implementierung einer Pipeline zur kontinuierlichen Integration, Auslieferung und Bereitstellung. Hauptsächlich dient eine CI/CD-Pipeline dazu, dem Team einen einheitlichen, zuverlässigen Prozess zur Freigabe von neuem Code an die Hand zu geben. Dies hat außerdem den Vorteil, dass die Zahl der menschlichen Fehler im freigegebenen Code so gering wie möglich bleibt.
Folgende Best Practices sollten Sie bei der Implementierung einer CI/CD-Pipeline befolgen:
- Prüfen und überwachen Sie Ihre Pipeline mit möglichst vielen automatisierten Tests und Metriken.
- Achten Sie darauf, dass die Entwicklungsumgebung in der gesamten Pipeline gleich bleibt.
- Optimieren Sie die automatisierten Tests, indem Sie die schnellsten Tests zuerst durchführen.
- Sorgen Sie dafür, dass Ihr Team Quellcode nur über die Pipeline bereitstellt.
Nicht alle CI/CD-Pipelines sind gleich aufgebaut. Bei den besten Pipelines stehen Geschwindigkeit, Präzision und Zuverlässigkeit im Vordergrund, sodass Ihr Entwicklungsteam nahtlos Änderungen in den Quellcode integrieren kann.
CI/CD-Tools
Da jedes Entwicklungsteam anders ist, sind auch alle CI/CD-Umgebungen individuell. Dieser Umstand hat zu einer enormen Vielfalt an Tools geführt, die Ihnen bei der kontinuierlichen Integration, Auslieferung und Bereitstellung von Code helfen können. Dies sind einige der am häufigsten genutzten CI/CD-Tools:
- Jenkins: Diese Open-Source-Bereitstellungssoftware ist kostenlos und eignet sich sogar für Großprojekte. Sie läuft auf Windows, Mac, Linux und Unix.
- AWS CodeDeploy: Diese Plattform zur Code-Bereitstellung eignet sich für Startups und kleinere Projekte. Die Bereitstellung von Code über AWS Lambda oder Amazon EC2 ist kostenlos – für jede lokale Instanz werden 2 Cent fällig.
- DeployBot: Dieses CI/CD-Tool kann von Unternehmen jeder Größe genutzt werden. Es kann Code von vielen verschiedenen Branches (engl. für Zweige) gleichzeitig bereitstellen und ermöglicht ein problemloses Rollback von Versionen.
- Octopus Deploy: Octopus ist eine der vielseitigsten Cloud-Bereitstellungsplattformen. Es kann selbst in äußerst komplexen Netzwerken problemlos benutzerdefinierte Skripte ausführen und Zertifikate verwalten.