Die schnelle Bereitstellung hochwertiger Software ist in der heutigen schnelllebigen digitalen Landschaft von entscheidender Bedeutung. Eine gut konzipierte Pipeline für kontinuierliche Integration und kontinuierliche Bereitstellung (Continuous Integration and Continuous Delivery, CICD) kann Entwicklungsteams dabei helfen, dieses Ziel zu erreichen, indem sie schnellere Feedbackschleifen ermöglicht und die Zeit zwischen Codeänderungen und Bereitstellung verkürzt.

Les pipelines d'intégration et de déploiement continus (CICD) sont devenus une partie essentielle du développement de logiciels ces dernières années, avec de multiples déploiements quotidiens dans certains cas. Cette boucle de rétroaction rapide a permis de développer de nouvelles fonctionnalités et de corriger les bogues beaucoup plus rapidement. Dans cet article, nous allons voir un exemple de mise en œuvre de pipelines CICD pour un client.

Pipelines für kontinuierliche Integration und kontinuierliche Bereitstellung (Continuous Integration and Continuous Deployment, CICD) sind in den letzten Jahren zu einem wichtigen Bestandteil der Softwareentwicklung geworden, wobei in einigen Fällen täglich mehrere Bereitstellungen vorgenommen werden. Dank dieser schnellen Feedbackschleife können neue Funktionen viel schneller entwickelt und Fehler behoben werden. In diesem Artikel werden wir ein Beispiel für die Implementierung von CICD-Pipelines für einen Kunden durchgehen.

Die CICD-Pipeline besteht aus vier Phasen: Entwicklung, Integration, Staging und Produktion. In der Entwicklungsphase wird jedes neue Software-Build unabhängig voneinander bereitgestellt und getestet, während in der Integrationsphase die Softwarekomponenten gemeinsam getestet werden. In der Staging-Phase werden die Softwarekomponenten in einer produktionsähnlichen Umgebung bereitgestellt, während die Produktionsphase die stabile Umgebung ist, auf die die Endbenutzer zugreifen können. Die Anwendung wird nach einem festgelegten Prozess sukzessive von der Entwicklungsumgebung in die Produktionsumgebung implementiert.

Die CICD-Pipeline folgt einem generischen Build- und Bereitstellungsprozess, der je nach verwendeter Sprache und Tools unterschiedlich implementiert wird. Zum Beispiel könnte ein Java/Maven Build mit Helm/Helmfile Deployment in Kubernetes verwendet werden.

Sicherheitstests sind ein wichtiger Bestandteil der CICD-Pipeline. Statische Anwendungssicherheitstests (SAST) und dynamische Anwendungssicherheitstests (DAST) werden eingesetzt, um potenzielle Probleme zu erkennen, bevor sie auftreten. Sonarqube ist ein Beispiel für eine eigenständige Anwendung, die mit einer bestehenden Entwicklungsumgebung verknüpft werden kann. Gitlab ist eine End-to-End-Plattform für die Softwareentwicklung, die nativ mit Plugins für Sicherheitstests integriert werden kann.

Das Erstellen von Docker-Images ist ebenfalls eine gängige Aufgabe in modernen Entwicklungsumgebungen. Kaniko ist ein von Google veröffentlichtes Tool, mit dem Sie Docker-Images in Gitlab erstellen können. Die Pipeline liest eine Datei docker-compose.yml, um Build-Informationen zu erhalten, die an Kaniko weitergegeben werden, um die im Projekt vorhandene Dockerdatei zu erstellen.

Sobald die Images erstellt sind, werden sie in einer Kai-Registry bereitgestellt, die die Möglichkeit bietet, Container-Layer auf bekannte Schwachstellen zu analysieren. In der Pipeline ist ein Python-Skript implementiert, um die Ergebnisse dieser Analyse abzufragen, so dass im Bereitstellungsprozess Quality Gates definiert werden können.

Für die Verwaltung der Docker-Build-Abhängigkeiten wird ein GitOps-Ansatz verwendet. GitOps ist eine Softwareentwicklungsmethodik, die Git als einzige Quelle der Wahrheit für die deklarative Infrastruktur- und Anwendungskonfiguration verwendet. Die Pipeline erstellt eine Datei, die das Upstream-Image mit dem Code-Repository verknüpft und bei jedem neuen Commit automatisch einen Build auslöst.