Continuous-Integration- und -Delivery umsetzen CI/CD-Pipelines mit MicroK8s und Git
Anbieter zum Thema
Continuous Integration and Delivery, oder kurz CI/CD, unterscheidet sich von herkömmlichen Methoden zur Softwareentwicklung und -bereitstellung. Mit den Grundlagen befasst sich dieser Beitrag.

In einer CI/CD-Pipeline muss in der Regel eine Person, z. B. ein Produktmanager, das gewünschte Verhalten der Software festlegen und beschreiben. Im nächsten Schritt schreibt und baut das Entwicklerteam den Code zusammen, testet ihn führt mithilfe einer Versionsverwaltung – in der Regel Git – die Versionskontrolle durch.
Schließlich validieren die Testingenieure die neue Software anhand einer Testreihe, die für das gewünschte Verhalten konzipiert wurde. Dieser Prozess hat aber eine Reihe von Schwachstellen.
- Die Fertigstellung jeder Phase hängt von der vorangegangenen Phase ab.
- Die Fehlersuche bei Code oder Tests, die von verschiedenen Teams geschrieben wurden, kann mühsam sein.
- Die teamübergreifende Koordination kann Verzögerungen verstärken und die Codequalität beeinträchtigen.
Genau hier kommen CI und CD ins Spiel. Häufig zusammen mit „DevOps“, „Agile“ oder „Automatisierung“ verwendet, wird damit ein moderner Entwicklungsprozess beschrieben, mit dem Teams Qualität und Produktivität verbessern wollen. Eine CI/CD-Pipeline ist eine Reihe von Phasen und automatisierten Schritten, die eine Software von der Codeentwicklung bis zur Bereitstellung für den produktiven Betrieb durchläuft.
CI steht für kontinuierliche Integration – „Continuous Integration“ – und bezieht sich auf die Software-Build-Pipeline. CI umfasst alle Schritte, die Entwickler zwischen dem Schreiben des Codes und der Übergabe an ein Testteam unternehmen. Diese Schritte sollen dem Team helfen, Probleme mit der Codequalität zu erkennen, indem sie ihm durch automatisierte Builds, Smoke-Tests, Unit-Tests usw. ein ständiges Feedback geben.
CD bezieht sich auf die Software-Release-Pipeline und kann entweder für „Continuous Delivery“ oder „Continuous Deployment“ stehen - zwei sehr ähnliche Praktiken, die sich hauptsächlich durch ihren Automatisierungsgrad unterscheiden. Bei CD geht es darum, zu überprüfen, ob der Code die gewünschte Funktionalität bietet. Dafür wird er in mehreren Umgebungen bereitgestellt, die die tatsächliche Produktionsumgebung replizieren. Die Software wird ausgeführt, bevor sie tatsächlich in der Produktion eingesetzt wird.
Was ist GitLab?
GitLab ist eine beliebte DevOps-Plattform für durchgängige Entwicklung und Operations. Sie bietet Nutzern ein Git-Repository für die Versionskontrolle, Fehlerverfolgung und CI/CD-Funktionen. Entwickler können die Web-UI und die API von GitLab nutzen, um Builds zu verfolgen, Testergebnisse nachzuverfolgen, Bereitstellungen zu überwachen und Batch-Aufträge für verschiedene Testumgebungen zu planen.
Was ist Kubernetes? Und was ist MicroK8s?
Die Containerisierung ist der neueste Trend in der modernen Softwareentwicklung. Container machen Software umgebungsunabhängig und gewährleisten gleichzeitig ein konsistentes Verhalten über verschiedene Umgebungen hinweg, was oft als „Cloud Native“ bezeichnet wird. Die Open-Source-Cloud-Plattform Kubernetes automatisiert Bereitstellung und Betrieb von Cloud-nativen Anwendungen in großem Umfang.
Diesen Vorzügen gegenüber steht der komplizierte Einstieg in Kubernetes; mithin der größte Nachteil der Plattform. Kubernetes einzurichten, kann sehr kompliziert sein, es wird mit einem großen Tooling-Ökosystem geliefert und erfordert eine Menge Konfiguration und Feintuning, um containerisierte Anwendungen langfristig zu betreiben.
Canonicals Lösung für dieses Problem ist die leichtgewichtige Kubernetes-Distribution MicroK8s. Entwickler und Unternehmen berichten häufig, dass MicroK8s die richtige Kombination aus intuitiver Bedienung und robustem Betrieb für ihren spezifischen Anwendungsfall bietet. Das gelte unabhängig davon, ob sie auf einer lokalen Workstation oder auf hochverfügbaren Clustern arbeiteten.
Was sind die Vorteile von Kubernetes CI/CD?
CI/CD-Workflows und Cloud-native Systeme haben einige Ziele gemeinsam: Beide versuchen, die Entwicklungsgeschwindigkeit zu erhöhen, die Softwarequalität zu optimieren und die Funktionstüchtigkeit zu erhalten. CI/CD automatisiert viele Schritte von der Entwicklung des Codes bis zur Freigabe für die Produktion.
Ähnlich automatisiert Kubernetes die Bereitstellung von Containern in verschiedenen Infrastrukturumgebungen und sorgt für eine effiziente Ressourcennutzung. Daher ergibt es Sinn für Unternehmen, CI/CD-Pipelines einzurichten, die die Kubernetes-Plattform nutzen.
GitLab ist eine der beliebtesten Lösungen für genau diesen Anwendungsfall, verfügt über eine integrierte Container-Registry und kann auf drei Arten mit Kubernetes integriert werden:
- Software, die in einer GitLab CI-Pipeline erstellt wurde, kann als Teil der CD-Phase in Kubernetes bereitgestellt werden.
- Kubernetes kann Batch-Job-Ausführungen verwalten, die mit einer GitLab-Instanz verknüpft sind
- GitLab-Instanzen selbst können in einem Kubernetes-Cluster ausgeführt werden.
Alles unter einen Hut gebracht: MicroK8s CI/CD mit GitLab
Für CI/CD-Pipelines auf Kubernetes bietet sich die Kombination von MicroK8s und GitLab an. Mit MicroK8s lässt sich ein vollständig konformes Kubernetes-Cluster bilden, während GitLab gleichzeitig die passenden Tools für den Aufbau einer vollständigen DevOps-Umgebung beisteuert. Anschließend sind nur noch ein paar virtuelle Maschinen nötig und schon können die Teams losgehen.
Wie das auf AWS funktioniert, zeigt die nachfolgende 5-Schritte-Anleitung. In diesem Tutorial wird auch das Charmed Operator Framework verwendet. Wer mit diesem denselben Schritten wie für AWS folgt, kann auf jeder Cloud dieses Set-up implementieren. Wer sich das genauer anschauen möchte, dem sei abschließend das folgende Youtube-Tutorial ans Herz gelegt.
* Alex Chalkias ist Produktmanager für Datacenter-Lösungen bei Canonical.
(ID:47739416)