Schlagwort-Archive: Continuous Delivery

Dockerimage für CI/CD mit Sloppy CLI

In CI/CD-Situationen, also in Situationen, in denen wir automatisiert gewisse Aussagen über und Aufgaben am aktuellen Entwicklungsstand einer Software vornehmen wollen, sind wir häufig auf die Kommandozeile angewiesen.

TL;DR: Das Runner-Image z.B. für GitLab ist auf DockerHub frei verfügbar dielok/sloppy-cicd. Wir werden die Dockerfile auch in Kürze bei Github veröffentlichen.

Über entsprechende Skripte, also aneinandergereihte Befehle, automatisieren wir dann den Prozess und visualisieren ihn in Form von sogenannten Build- und Deploymentpipelines.

Auch mit dem Cloud-Anbieter Sloppy muss dies natürlich irgendwie innerhalb eines Skriptes möglich sein, damit wir den Entwicklungsstand auch automatisiert veröffentlichen können. So kann die Anwendung auch letztlich von Endnutzern verwendet werden. Dies kann ein Server sein, oder ein ganzes Netzwerk aus Servern, daher sprechen wir von Umgebungen. Auf der sogenannten Produktivumgebung läuft die Anwendung für den Endverbraucher. Umgangssprachlich „Prod“.

Auch auf Umgebungen die nicht produktiv sind, müssen die aktuellen Entwicklungsstände ausgerollt werden können. Diese dienen beispielsweise den Tests der Qualitätssicherung, Demonstrationen für Stakeholder und der Beobachtung des Fortschritts durch Manager. Das soll so zuverlässig, einfach und schnell wie möglich ablaufen: Also automatisiert.

Das geht mit Sloppy im Handumdrehen. Super einfach ist ein neues Projekt (Umgebung) angelegt, Services, Apps in Form von Docker-Containern definiert.Nicht nur in dem UI. dem Portal von Sloppy. Sloppy bietet eine gut entwickelte CLI-Anwendung, mit der Apps, Services und Projekte verwaltet und gesteuert werden können.

Und so können auch die Deployment-Schritte in der Pipeline mit Sloppys CLI-Tool automatisiert werden. Das Skript für diesen Schritt ist dann gerade einmal zwei Zeilen lang:

script:
- export SLOPPY_APITOKEN="$SLOPPY_APITOKEN"
- sloppy change --image docker/container:${CI_COMMIT_REF_NAME} umgebung/service/app

(Auszug aus der CI/CD-Konfiguration für Gitlab)

Zu verbessern wäre, dass dieser Pipelineschritt noch wartet, bis das Deployment erfolgreich abgeschlossen wurde und der Service gestartet werden konnte.

Doch wie bekommt die Pipeline die Sloppy CLI, sodass der Befehl sloppy überhaupt zur Verfügung steht? Entweder lädt und installiert die Pipeline die Binaries bei jeder Ausführung dieses Schrittes oder die Anwendung wird bereits in den zugrundeliegendeliegenden Container installiert und steht immer gleich zur Verfügung.

Für unser Zwecke habe ich den Container mal erstellt und auf Docker Hub verfügbar gemacht: dielok/sloppy-cicd. Viele Erfolg.

Wirtschaftlicher Nutzen von CI/CD

Produktinnovation ist in einer digitalisierten Welt der Schlüssel zum Erfolg. Um sich vom Wettbewerb abzuheben, sollen Innovationen so rasch wie möglich und voll funktionsfähig an den Markt gebracht werden. Doch konventionelle Entwicklungsmethoden sind meist schwerfällig und bremsen die Time-to-Market. Um die Zeitspanne zwischen Entwicklung und Marktveröffentlichung zu verkürzen, sind in der Vergangenheit effektive Ansätze entwickelt worden.

Bei konventionellen Vorgehensweisen, vergehen teilweise Monate bis es zu einem Release kommt. Zunächst müssen alle Fehler behoben und Funktionen entwickelt bzw. erweitert werden. Erst danach folgt ein großes Update. Dabei werden beinahe alle Änderungen und Anpassungen manuell durchgeführt und der Prozess wird dementsprechend anfälliger für Fehler. Der gesamte Prozess ist wenig flexibel sorgt oftmals für komplexe Workarounds für die Entwickler.

Eine Lösung für dieses umständliche Vorgehen muss her. Ein lohnender Ansatz soll den Entwicklungsprozess von Software vereinfachen und zugleich beschleunigen: Das CI/CD.

Unterschied zwischen Continuous Integration (CI) und Continuous Delivery (CD)

Was ist also CI/CI? CI bzw. CD steht für Continuous Integration bzw. Continuous Delivery. Continuous Integration (CI) ermöglicht eine kontinuierliche Integration von neuem Code in ein gemeinsames Repository während Continuous Delivery (CD) für die Überführung des Codes von Repository in die Produktion zuständig ist.

Durch die Anwendung von CI/CD können sowohl die Fehlerquote als auch der Release-Zyklus minimiert werden. Im ersten Schritt, der Continuous Integration, testet der Entwickler den von ihm produzierten Teil des Codes bevor er ihn in das Controle-Repository übermittelt. Danach folgt meist eine neue Quellcode-Version, welche mittels Unit-Tests auf Fehler geprüft und in Testumgebungen eingefügt wird. Hier werden auch ganzheitliche Systemtests durchgeführt. Wenn der neue Teil des Codes erfolgreich alle Tests durchlaufen hat, wird das Team automatisch benachrichtigt. Zudem werden Informationen über die Anzahl der Tests und der gefundenen Fehler gesammelt.

Continuous Delivery (CD) setzt dort an, wo Continuous Integration endet. Bevor Software in die Produktionsumgebung übermittelt wird, werden Systemtests, Unit-Tests (inklusive API-Tests und Lasttests) und Integrationstests durchgeführt. Diese Tests sind allesamt Teil von Continuous Delivery und werden automatisch durchgeführt. Über den kompletten CI/CD-Prozess hinweg, können Fehlermeldungen rasch und direkt über Feedback-Kanäle an die Entwickler weitergeleitet werden.

Nachfolgend sind die relevantesten Vorteile von CI/CD aufgelistet, die letztlich in einer Kostensenkung resultieren.

  • Kleine Schritte: Statt große Teile des Codes auf einmal zu integrieren und in späterer Folge deren Fehler umständlich zu beheben, werden bei CI/CD mehrere kleinere Teile in das Repository eingefügt. Das Continuous Testing wird dadurch erleichtert, weil nur kleinere Stücke untersucht werden müssen und mögliche Probleme somit eher gefunden werden.
  • Kürzere Release Rates: Durch das rasche Erkennen und Beheben von Fehlern, können mehrere kleinere Code-Teile in kürzeren Abständen released werden. Dies ist allerdings nur möglich, wenn in einem kontinuierlichen Prozess entwickelt und der Code in einem releasefähigen Zustand gehalten wird.
  • Ordentlicher Backlog: Wird CI/CD in den Entwicklungsprozess integriert, so verändert sich die Fehlerquote im Backlog. Da kleinere Fehler rascher gefunden werden, kann sich das Team auf kritische Probleme konzentrieren.
  • Einfache Wartung: Mithilfe von Microservices können einzelne Bereiche eines Systems heruntergefahren werden ohne das restliche System betroffen ist. Somit können Wartungsarbeiten nahezu unbemerkt stattfinden.
  • Continuous Feedback: Durch die regelmäßige Integration des Codes, entsteht eine verlässliche und kontinuierliche Feedbackschleife. In dieser befinden sich vor allem Entwickler. Deren Rückmeldung zu Pipeline Build-Fehler, Merging-Problemen, Architektur-Rückschlägen usw. ist enorm wichtig für den gesamten Prozess.

Darauf sollte geachtet werden

Den Entwicklern soll die Arbeit mit dem CI/CD-Ansatz erleichtert werden, weshalb ein einfacher Prozessaufbau essentiell ist. Je weniger sie sich mit dem eigentlichen Prozess und manuellen Aufgaben aufhalten, desto effektiver kann gearbeitet werden. Zudem sollten Entwickler bis auf wenige Ausnahmen, direkt am Master-Branch arbeiten um eine sofortige Integration und das zugehörige Testen zu ermöglichen.

Wird CI/CD in den Entwicklungsprozess von Software integriert, so müssen automatisierte Tests auf allen Ebenen durchgeführt werden. Dies schließt mitunter Unit-, Integrations- und Systemtests ein, genauso wie automatisierte Tests für Funktionalität, Benutzerfreundlichkeit, Leistung, Last, Stress und Sicherheit durchgeführt werden müssen. Erst dann kann von CI/CD ganzheitlich profitiert werden.

Als nützliche Tools erweisen sich beispielsweise Repository-Management-Systeme wie Gitlab und Bitbucket oder Services für die Build-Automatisierung wie Jenkins oder eben auch Gitlab. Beispiele für die Testautomatisierung sind das Tool Katalon Studio oder jUnit in der Javawelt. Aber die Auswahl ist praktisch unendlich.

Fazit

Continuous Integration und Continuous Deployment zerstückeln den Entwicklungsprozess in kleine Teile. Diese Teile werden in regelmäßigen Abständen in ein gemeinsames Repository integriert und nach dem Testen dem Kunden rasch zur Verfügung gestellt. Sie sind ein zentrale Teil der DevOps-Methodik. Der gesamte Entwicklungsprozess wird übersichtlicher und flexibler, dadurch werden Fehler einfacher gefunden und behoben. Um mit der Konkurrenz mitzuhalten bzw. diese sogar zu übertreffen und unnötige Fehlersuche zu vermeiden, ist die Integration von CI/CD in den Entwicklungsprozess also eine einfache, effektive aber auch mittlerweile unverzichtbare Methode.