CI/CD Einfach Erklärt

Wir haben kontinuierliche Integration und kontinuierliche Bereitstellung (continuous integration/continuous delivery, auch CI/CD genannt) in einigen unserer LinkedIn-Beiträgen und in mindestens einem unserer früheren Blogbeiträge über Kubernetes erwähnt. All diese Beiträge bezogen sich immer auf eine bestimmte Phase in der gesamten Deployment-Pipeline. In diesem Artikel möchten wir einen breiteren Überblick über den Deployment Prozess geben und kurz auf eines der beliebten Tools zum Aufbau von Deployment-Pipelines im großen Stil eingehen.

Die Anatomie einer Deployment-Pipeline

Deployment-Pipeline und CI/CD werden manchmal als Synonyme verwendet. Dies ist jedoch nicht korrekt. Die Deployment-Pipeline ist ein Prozess zur Bereitstellung von Softwareanwendungen in der Produktionsumgebung, der mit dem Schreiben des Quellcodes beginnt und mit dem Rollout der Anwendung endet. Dieser Prozess wird als Pipeline bezeichnet, da die Anwendung reibungslos von einer Stufe zur anderen übergehen soll. Das ist aber nicht immer der Fall. Es funktioniert nur dann so, wenn der gesamte Prozess mit verschiedenen Werkzeugen automatisiert wird. CI/CD ist das Konzept, das besagt, dass die Pipeline ohne Unterbrechung funktionieren muss.

Eine Deployment-Pipeline umfasst die folgenden vier Stufen:

1. Versionskontrolle. In dieser Phase erstellt ein Entwicklerteam einen neuen Quellcode. Wenn wir von der Pipeline und nicht vom manuellen Deployment sprechen, wird der Quellcode in ein Versionskontrollwerkzeug eingespeist. Das Tool – in den meisten Fällen wird dies GitHub sein – ordnet den neuen Teil des Codes innerhalb des bestehenden zu. 

2. Testen. Um Teil der Deployment-Pipeline zu sein und zur Idee von CI/CD zu passen, müssen die Tests so weit wie möglich automatisiert werden. Sie wollen ja auch, dass die Endbenutzer einen guten (und frühen) Eindruck von der Benutzerfreundlichkeit und der visuellen Ästhetik bekommen. Dies kann nur von menschlichen Testern geleistet werden. Aber abgesehen davon muss die Automatisierung von Tests ein Vorrecht haben.

3. Sandbox/unabhängige Bereitstellung. Selbst wenn die Testphase erfolgreich abgeschlossen wurde, ist der sofortige Rollout in die Produktion weit von den heutigen Best Practices entfernt. Jede neue Anwendung wird zunächst in der Testumgebung bereitgestellt, die eine Kopie der produktiven Umgebung ist.

4. Einsatz in der Produktion. In der letzten Phase rollen Sie die Anwendung in die produktive Umgebung aus, wo die Arbeit für das Unternehmen beginnen kann.

Wie bereits erwähnt, kann man nur dann von CI/CD sprechen, wenn die Bewegung entlang der Pipeline automatisiert ist. Dies wird mit den folgenden Tools ermöglicht.

Werkzeuge zur Deployment-Automatisierung

Jetzt wird klar, warum Deployment-Pipeline und CI/CD oft austauschbar verwendet werden. Jeder Schritt in der Pipeline kann automatisiert werden. Das bedeutet aber nicht zwangsläufig, dass die Pipeline autonom zu arbeiten beginnt und kein menschliches Eingreifen mehr benötigt wird. In der Tat kann man sie nicht zu einem Roboter machen, aber das ultimative Ziel – was als CI/CD bezeichnet wird – ist es, so wenig wie möglich manuell steuern zu müssen.

Hierfür können Sie verschiedene Tools einsetzen. Der zweite Name für Continuous Integration ist Build-Automatisierung: Der neue Quellcode muss kompiliert, gebaut und zusammengeführt werden. Der zweite Name für Continuous Delivery ist Deployment-Automatisierung. Dazwischen liegen ein paar zusätzliche Schritte, die den neuen Code testen und seine Qualität überprüfen. 

Jenkins war das erste Tool zur Deployment-Automatisierung. Es wurde innerhalb MIT – Massachusetts Institute of Technology – geboren, das regelmäßig herausragende Open-Source-Projekte hervorbringt und die Alma Mater für die besten amerikanischen und internationalen Unternehmer, Forscher und einfach nur talentierte Menschen ist.  

Ursprünglich hatte Jenkins keine Integration mit GitHub, wo viele Entwickler routinemäßig den Quellcode ablegen. Ein GitHub-Plugin wurde erst kürzlich hinzugefügt. So bekam Jenkins bald seinen ersten ernsthaften Konkurrenten – CodeShip – der nicht nur eine Cloud-Plattform, sondern auch eine einfache GitHub-Integration anbot.

Heutzutage gibt es zahlreiche Anbieter, die in den Wettbewerb um die beste Deployment-Automatisierungsplattform eingestiegen sind. Sie alle streben danach, mit dem folgenden Benchmark-Modell gleichzuziehen.

Was sollte eine Deployment-Automatisierungsplattform können?

Neben der Versionskontrolle ist die Fehlerverfolgung (Bug Tracking) das Feature, das viele Entwickler an der Deployment-Automatisierung schätzen. 

Das Release-Management umfasst mehrere Schritte des Deployments und hilft bei der Steuerung von Berechtigungen. Der Unterschied zwischen Deployment und Software-Release besteht darin, dass letzteres die Software für Endanwender zugänglich macht, während das Deployment einer Anwendung bedeuten kann, dass nur Entwickler mit ihr arbeiten werden.

In jeder Phase Ihrer Deployment-Pipeline haben Sie möglicherweise verschiedene Variablen, die Sie hin und wieder verwenden, z. B. API-Schlüssel, Passwörter, Dateipfade usw. Die Variablenverwaltung kümmert sich um die Speicherung dieser Elemente und kann Ihre Deployment-Erfahrung wirklich verbessern.

Konfiguration als Code ist eine weitere Funktion, die Entwickler für ein einfaches Leben benötigen. Deployment-Pipelines können über eine grafische Benutzeroberfläche eines Tools oder über ein Skript, meist im YAML-Format, konfiguriert werden. Die zweite Option ermöglicht es Entwicklern, neue Pipelines schneller zu erstellen, indem sie die Vorlagen-YAML-Datei bearbeiten und auf die Deployment-Plattform hochladen.

In der Tat werden die meisten modernen Anwendungen in der Cloud bereitgestellt. Deshalb ist es sinnvoll, ein Tool zu verwenden, das auch das kann, oder zumindest in die beliebtesten Clouds wie Azure, Google Cloud und AWS zu deployen. Die Cloud-Unterstützung gehört also zum Benchmark der Deployment-Automatisierung.

Da viele Unternehmen über komplexe IT-Systeme verfügen, müssen sie nicht nur das Deployment verwalten, sondern auch den breiteren Entwicklungsbetrieb (DevOps): den Puffer zwischen Entwicklungsteams und IT-Administratoren. DevOps-Ingenieure haben eine Menge Routineaufgaben, die sie gerne automatisieren würden. Wenn die CI/CD-Plattform auch das kann, dann erfüllt sie die Anforderungen an ein Benchmark-Deployment-Tool. Die DevOps-Automatisierung sollte darin integriert sein.

Wie Sie vielleicht vermuten, haben sich einige Internet-Giganten, darunter Microsoft, darauf gestürzt, ihre eigenen Plattformen zur Deployment-Automatisierung zu entwickeln. Azure DevOps wurde unter ihnen ziemlich populär.

Ein kurzer Überblick über Azure DevOps

Im Kern seiner Funktionalität erlaubt es Azure DevOps, zwei Arten von Triggern zu erstellen:

  • Diejenigen, die einen Build initiieren, sobald ein neues Stück Code von einem Entwickler committed wurde; so ermöglicht es kontinuierliche Integration; 
  • Diejenigen, die ein Deployment initiieren, sobald das neue Stück gebaut und getestet wurde; so wird eine kontinuierliche Bereitstellung ermöglicht. 

Ähnlich wie GitHub speichert Azure DevOps die Historie aller Commits, Builds, Deployments und Releases. Es hat jedoch eine andere Oberfläche, die im Allgemeinen für Personen ohne viel Programmiererfahrung bequemer ist, wodurch es für DevOps-Ingenieure nützlicher ist. Obwohl die Konfiguration der Pipeline in YAML-Dateien gespeichert wird, ist das gesamte Tool no-code. 

Standardmäßig ermöglicht Azure DevOps die Bereitstellung in der Azure-Cloud, aber Sie können auch Marketplace-Erweiterungen für die Bereitstellung in AWS und einigen anderen Clouds hinzufügen. 

Azure DevOps ermöglicht Ihnen, wie viele andere Tools zur Deployment-Automatisierung, die Planung von Deployments und das Sammeln von Protokolldaten, die Ihnen bei der Überwachung von Deployments und der Anwendungsleistung helfen. Azure DevOps kann mit GitHub zusammenarbeiten und zwingt Sie nicht dazu, letzteres aufzugeben.

Fazit

Die Entwicklung einer Anwendung erfordert viel mehr als nur das Schreiben eines Codes. Den Code zum Leben zu erwecken – Testen, Bereitstellen, Freigeben – ist ein kniffliger Teil. Wenn Sie Spezialisten brauchen, die beides können und die gängigsten Deployment-Automatisierungstools kennen, wenden Sie sich an JCFINCH. Wir haben definitiv talentierte Kandidaten in unserer Datenbank.