Continuous Integration & Deployment und warum diese Strategie auch für kleine Projekte nützlich ist

vor 3 Jahre

Development

Einleitung

Bei Syntro setzen wir stark auf Continuous Integration (kontinuierliche IntegrationCI) und Continuous Delivery (kontinuierliche Auslieferung, CD). Dabei verwenden wir Werkzeuge wie Ansible (für das wir eine spezifische Rolle zum Deployment von Silverstripe bereitstellen) und Docker, sowie verschiedene Paket-Manager, welche uns das Erstellen, Weiterentwickeln, Updaten und schlussendlich das Bereitstellen von Projekten ungemein erleichtern.

Was ist eigentlich CI/CD?

Wie in der Einleitung erwähnt, stehen CI für Continuous Integration und CD für Continuous Deployment oder Continuous Delivery. Häufig trifft man auch den Begriff Pipeline in diesem Zusammenhang an.

CI beschreibt dabei die kontinuierliche Arbeit an einem Projekt. Dabei arbeiten mehrere Personen gleichzeitig an verschiedenen Features, welche nach Abschluss getestet und zum existierenden Status einer Applikation hinzugefügt werden. Dadurch kann eine Applikation stetig wachsen, ohne dabei die Nutzer zu beeinträchtigen.

CD kann zwei Bedeutungen haben. Steht das D für Deployment, so wird der aktuelle Zustand kontinuierlich auf ein produktives System übertragen, wo er den Endnutzern zur Verfügung steht. Das bedeutet im Klartext, dass alle Anpassungen, neuen Funktionen und Fehlerbehebungen sofort, nachdem sie getestet wurden an den Nutzer ausgeliefert werden. Steht das D für Delivery, so wird damit ein zusätzlicher Schritt eingeführt, um den neuesten Stand nur bei manuellem Input auf ein produktives System zu übertragen. Dies ist z.B. bei versionierter Software der Fall, wobei regelmässig eine neue Version mit allen neuen Features zusammengefasst wird (sprich "Version 2 kann neu X und Y"), welche dann zum Beispiel auf ein Live-System übertragen oder als Patch an den Kunden ausgeliefert wird.

Für Software aller Art bieten sich solche automatisierten Abläufe (Pipelines) an, um effizient neue Funktionen zu entwickeln und somit das Produkt ständig zu verbessern.

Der Nutzen von CI/CD für kleine Projekte

Auch wenn kleine Projekte (in unserem Fall meist Webseiten) häufig als statisch erscheinen, sind sie es meist nicht. Das Anwenden einer gut abgestimmten CI/CD Pipeline kann helfen, folgende Punkte einfacher und effizienter zu handhaben:

  • Updates: Eine Webseite ist oft mehr als nur der für einen Kunden erstellte Code. Abhängigkeiten wie Module oder Plugins werden ständig weiterentwickelt, Fehler werden behoben und Sicherheitslücken geschlossen. Leider können neue Versionen von solchen Modulen auch Probleme bei einer Applikation verursachen, welche mit einer vorherigen Version entwickelt wurde. In einer CI/CD Pipeline können Updates automatisiert gemacht, getestet und mit nur wenig Aufwand auf ein Live-System übertragen werden.
  • Anpassungen: Mit einer gut aufgebauten CI/CD Pipeline können kleine Anpassungen einfach vorgenommen, getestet und präsentiert werden, ohne dabei die Live-Umgebung zu beeinflussen. Und nach Komplettierung kann die neue Funktion ganz einfach auf ein Live-System übertragen werden.
  • Trennung von Entwicklungsumgebung und Liveumgebung: CI/CD Pipelines trennen die Version an welcher gearbeitet wird von der, die Besucher sehen. Dadurch werden Probleme reduziert und der Entwicklungsprozess einfacher und effizienter.

Wie richte ich eine CI/CD Pipeline ein?

In den meisten Fällen lässt sich eine CI/CD Pipeline einfach umsetzen. Die Basis bildet ein sogenanntes Version-Control-System (VCS), welches die Arbeit von mehreren Entwicklern am gleichen Projekt ermöglicht. Meistens wird in Softwareprojekten bereits ein VCS (meist Git) verwendet. Mittels Repositories lässt sich Code einfach remote abspeichern. Bekannte Lösungen sind zum Beispiel Github oder die quelloffene Alternative Gitlab.

Basierend auf diesen Lösungen lässt sich mit wenig Aufwand eine einfache CI/CD Pipeline aufbauen. Github bietet dazu z.B. sogenannte «Actions» an, welche es erlauben, bei verschiedenen Ereignissen (z.B. beim Hinzufügen einer neuen Funktion) Aktionen auszuführen. Das können einfache Tests bis hin zu komplexen Deployment-Prozessen sein. Eine einfache Pipeline sollte nach unserer Erfahrung mindestens folgende Aktionen beinhalten:

  1. Eine Test-Aktion, welche bei jedem Push von neuem Code eine Testsuite ausführt
  2. Eine Deployment-Aktion, welche entweder bei jedem Update eines «Branches» (Continuous Deployment) oder beim Erstellen einer Version (Continuous Delivery) ausgeführt wird

Desweiteren sollte ein Regelset eingeführt werden, welches die einfache Zusammenarbeit aber auch die Kontrolle des erstellten Codes ermöglicht. Dazu eignet sich zum Beispiel der «Git-flow-Workflow» besonders gut.

Du möchtest herausfinden, ob du von einer CI/CD Pipeline profitieren kannst?

Du möchtest herausfinden, ob du von einer CI/CD Pipeline profitieren kannst?

Wir beraten dich gerne zu allen möglichen Aspekten der Bereitstellung, Wartung und Weiterentwicklung von Web-basierten Projekten.

Nimm dazu einfach Kontakt mit uns auf!

Leutenegger Matthias
Matthias Leutenegger