Tools für Continuous Integration

Max Rehkopf Max Rehkopf

Zusammenfassung: Continuous Integration (CI) ist eine bewährte Agile- und DevOps-Methode, die mehreren Entwicklern die schnelle Bearbeitung einer gemeinsam genutzten Codebasis ermöglicht. Ohne Continuous Integration ist die Entwicklerzusammenarbeit ein mühsamer manueller Prozess, bei dem Code-Updates und Merges koordiniert werden müssen.

Die Säulen der Continuous Integration

CI basiert auf bewährten Agile- und DevOps-Methoden für die Softwareentwicklung, einschließlich automatisierten Tests, Versionskontrolle, Build-Automatisierung und automatisierten Deployments. Jede dieser Continuous-Integration-Säulen beinhaltet eine eigene Umgebung aus Tools und Philosophien. Anbieter von Softwareentwicklungstools haben damit begonnen, vollständige CI-as-a-Service-Angebote bereitzustellen, die diese Säulen in einem ganzheitlichen Paket bündeln. Um diese Paketangebote besser zu verstehen, sehen wir uns die Grundlage an.

Versionskontrollmanagement

Die wahrscheinlich wichtigste grundlegende Continuous-Integration-Säule, das Versionskontrollmanagement, wird verwendet, um Bearbeitungskonflikte zu kommunizieren und zu lösen, wenn mehrere Entwickler an derselben Codebasis arbeiten. Das Versionskontrollmanagement ist in einer Vielzahl von Tools verfügbar. Die beliebtesten davon sind Git und Subversion. Bei CI-as-a-Service-Produkten geht es zentral um die Versionskontrolle.

Automatische Tests

Seriöse Softwareprojekte beinhalten in der Regel eine zusätzliche Codebasis, die nicht explizit für das Geschäftsprodukt und die Funktionen genutzt wird. Diese sekundäre Codebasis ist eine Test-Suite, mit deren Hilfe verifiziert werden kann, dass die primäre Codebasis ordnungsgemäß funktioniert. Während der Entwicklung werden diese Tests von Entwicklern ausgeführt, um zu bestätigen, dass neuer Code bei bestehenden Funktionen keine neuen Fehler hervorruft. Zur Automatisierung der Überprüfung können diese Testfälle auch durch externe Tools durchgeführt werden. CI-Serviceprodukte führen die Testfälle für ein Projekt automatisch aus, wenn benutzerdefinierte Ereignisse eintreten. Normalerweise wird ein vollständiger Test ausgelöst, wenn ein Entwickler über das Versionskontrollsystem einen Code-Push durchführt.

Build-Automatisierung

Builds sind die Artefakte, die erstellt werden, um eine Momentaufnahme der aktuellen Release-Version eines Softwareprojekts festzuhalten. Builds werden über verschiedene Netzwerke an die Endnutzer verteilt. In der Regel gibt es eine Reihe von skriptbasierten Schritten, die in einem Projekt ausgeführt werden, um ein Build-Artefakt zu erstellen. CI-Tools können helfen, diesen Build-Prozess mithilfe automatischer Trigger aus dem Versionskontrollsystem zu optimieren. Ein Beispiel-Trigger könnte nach einer Zusammenführung von neuem Code mit dem Produktions-Branch der Codebasis dafür sorgen, dass der Build auf einen Remote-Server hochgeladen wird, um Benutzern als Download zur Verfügung zu stehen.

Automatisierte Deployments

Wenn Builds bereit sind, verteilt zu werden, durchlaufen sie einen Deployment-Prozess. Je nach Projekt kann das Deployment unterschiedliche Ergebnisse haben. Beispielsweise werden Webprojekte auf öffentlich zugänglichen Webservern bereitgestellt. Während dieses Deployments wird das in der Build-Phase generierte Artefakt auf die Webserver kopiert. Deployment-Prozesse für Mobilgeräte und Desktop-Computer variieren und können den Upload in einen Shop beinhalten, damit Benutzer die App herunterladen können.

Tools für Continuous Integration – Vergleich

Bitbucket-Pipelines

Zusammenfassung: Bitbucket Pipelines ist ein CI-Tool, das direkt in Bitbucket integriert ist, ein von Atlassian angebotenes Cloud-Versionskontrollsystem. Bitbucket Pipelines ist eine einfache Möglichkeit, um CI zu aktivieren, wenn sich dein Projekt bereits auf Bitbucket befindet. Da Bitbucket Pipelines als Code verwaltet werden, ist es einfach, Commits für Pipeline-Definitionen durchzuführen und Builds zu starten. Darüber hinaus bietet Bitbucket Pipelines Continuous Delivery. Dadurch können mit Bitbucket Pipelines erstellte Projekte auch in Produktionsinfrastruktur bereitgestellt werden.

Merkmale:

  • Einfache Einrichtung und Konfiguration
  • Einheitliche Bitbucket-Erfahrung
  • Cloud von Drittanbieter

Website: https://bitbucket.org/product/features/pipelines

Jenkins

Zusammenfassung: Jenkins ist ein bewährtes CI-Tool mit einer langjährigen Erfolgsbilanz. Es basiert auf Open Source und wird durch Community-Updates weiterentwickelt. Jenkins ist in erster Linie als lokale Installation gedacht. Das Tool ist eine hervorragende Option, wenn dein Unternehmen lokalen Support für die Abwicklung sensibler Kunden benötigt, z. B. für HIPAA-Compliance-Daten.

Merkmale:

  • Vor Ort
  • Open Source
  • Solide Add-on-/Plug-in-Umgebung

Website: https://jenkins.io/

AWS CodePipeline

Zusammenfassung: Amazon Web Services ist einer der dominantesten Anbieter von Cloud-Infrastrukturlösungen auf dem Markt. AWS bietet Tools und Services für Infrastruktur- und Codeentwicklungsaufgaben jeder Art. CodePipeline ist das CI-Tool des Anbieters. Es kann direkt mit anderen AWS-Tools verbunden werden und sorgt dadurch für eine nahtlose AWS-Erfahrung.

Merkmale:

  • Vollständig cloudbasiert
  • Integriert in Amazon Web Services
  • Benutzerdefinierte Plug-in-Unterstützung
  • Robuste Zugriffskontrolle

Website: https://aws.amazon.com/codepipeline/

CircleCI

Zusammenfassung: CircleCI ist ein CI-Tool, das sich problemlos mit Github verknüpfen lässt, einem der beliebtesten Cloud-Hosting-Tools für Versionskontrollsysteme. CircleCI gehört zu den flexibelsten CI-Tools, da es eine Reihe von Versionskontrollsystemen, Containersystemen und Bereitstellungsmechanismen unterstützt. Das Tool kann lokal gehostet oder über ein Cloud-Angebot genutzt werden.

Merkmale:

  • Benachrichtigungs-Trigger von CI-Ereignissen
  • Für schnelle Builds optimierte Leistung
  • Einfaches Debuggen durch SSH und lokale Builds
  • Analysen zur Messung der Build-Leistung

Website: https://circleci.com/

Azure Pipelines

Zusammenfassung: Azure ist die Cloud-Infrastrukturplattform von Microsoft und vergleichbar mit Amazon Web Services. Wie das oben erwähnte AWS CodePipeline bietet Azure ein CI-Tool, das vollständig in die Azure-Suite aus Hosting-Tools integriert ist.

Merkmale:

  • Integration in die Azure-Plattform
  • Unterstützung für die Windows-Plattform
  • Container-Support
  • Github-Integration

Website: https://azure.microsoft.com

GitLab

Zusammenfassung: Gitlab ist ein neues CI-Tool, das ein umfassendes DevOps-Erlebnis bietet. Gitlab wurde ursprünglich entwickelt, um die allgemeine Github-Erfahrung zu verbessern. Das Tool bietet eine moderne Benutzererfahrung mit Container-Support.

Merkmale:

  • Lokales oder cloudbasiertes Hosting
  • Kontinuierliche Sicherheitstests
  • Intuitive Benutzeroberfläche

Website: https://about.gitlab.com

Atlassian Bamboo

Zusammenfassung: Ein weiteres CI-Angebot von Atlassian. Im Gegensatz zu Bitbucket Pipelines, das eine reine Cloud-Hosting-Option darstellt, bietet Bamboo eine selbst gehostete Alternative.

Merkmale:

  • Beste Integration in die Produktsuite von Atlassian
  • Umfangreicher Marktplatz mit Add-ons und Plug-ins
  • Container-Support mit Docker-Agents
  • Trigger API für IFTTT-Funktionalität

Website: https://www.atlassian.com/software/bamboo

Welches ist das beste CI-Tool für dein Unternehmen?

Bei der Auswahl eines CI-Tools für dein Team solltest du einige wichtige Faktoren berücksichtigen.

Support für Versionskontrollsysteme

Der Grundpfeiler eines CI-/CD-Systems ist die Unterstützung und Integration des zugrunde liegenden Versionskontrollsystems (VCS). Zu den beliebtesten dieser Systeme gehören Git, Subversion, Mercurial und Perforce. Cloudbasierte CI-Tools können Unterstützung für einige oder alle dieser VCS bieten. Es ist wichtig, ein CI-Tool zu wählen, das Unterstützung für die Systeme bietet, die in deinen Projekten verwendet werden.

Lokal und cloudbasiert

Einige der oben genannten CI-Tools, z. B. Jenkins, können lokal installiert werden. In dem Fall ist dein Team für das Konfigurieren und Verwalten des CI-Systems in deiner eigenen Infrastruktur verantwortlich. Dies kann Vorteile im Hinblick auf Datenschutz und Sicherheit bieten. Wenn beispielsweise Datenschutzbedenken bezüglich der Einhaltung von Compliance-Standards für Kundendaten bestehen, ist eine lokale Lösung möglicherweise eine Voraussetzung. Darüber hinaus können lokale Instanzen umfangreichere Anpassungs- und Konfigurationsoptionen bieten.

Lokale Tools können aber auch für Mehraufwand sorgen, der sich nicht mit deinen zentralen Geschäftsanforderungen in Einklang bringen lässt. Bei Cloud-Optionen wird die Verwaltung des CI-Tools an einen Drittanbieter ausgelagert. Das Cloud-Hosting-Unternehmen kümmert sich dann um die Verfügbarkeit, den Support und die Skalierung des CI-Tools, sodass sich dein Team auf die Anforderungen des Kerngeschäfts konzentrieren kann. Dies kann ein erheblicher Vorteil für Teams mit engen Budgets oder für kleinere Unternehmen sein, deren Fokus konsequent auf die Ziele für den Produktmarkt gerichtet sein muss.

Container-Support

Containerisierung ist ein Trend der modernen Softwareentwicklung. Sie ermöglicht die Verteilung einer unveränderlichen, wiederholbaren und isolierten Kopie einer Anwendung. Die Containerisierung wird durch Tools wie Docker und Kubernetes ermöglicht. Moderne CI-Tools bieten Unterstützung für die Integration von Containern in den CI-/CD-Prozess. Container sorgen dafür, dass Anwendungen nicht auf verschiedenen Systemen getestet werden müssen. Sie stellen sicher, dass Anwendungscode in einer Momentaufnahme von Abhängigkeiten auf Systemebene festgehalten werden. Dadurch wird gewährleistet, dass der Code, den dein Team im CI-Tool ausführt, ein Replikat der lokalen Umgebung ist. So können eine Reihe von Fehlerbehebungsproblemen beseitigt werden, die ohne Container im Zusammenhang mit der Umgebungsparität auftreten.

Plug-ins und Drittanbieterintegrationen

CI-Tools sind noch nützlicher, wenn du sie in deinen restlichen Technologie-Stack integrierst. Sie können Analysen zur Effizienz und Leistung von Entwicklerteams erfassen. Anwendungen für die Planung von Sprints können mit CI-Tools verknüpft werden, um den Sprint-Status automatisch zu aktualisieren, wenn der Code bereitgestellt wurde. Diese Integrationen können als Orientierung für die KPIs und Roadmaps von Entwicklerteams verwendet werden.

Einstieg in CI

Ein modernes CI-Tool ist eine entscheidende Voraussetzung für ein produktives Entwicklerteam. Teams können ihre Kommunikation und das Bereitstellungstempo optimieren, indem sie ein CI-Tool einsetzen. Auf dem Markt werden viele beliebte CI-Tools angeboten. Folgende Säulenkonzepte sollten bei der Auswahl eines CI-Tools beachtet werden: Unterstützung für Versionskontrollsysteme, lokales und cloudbasiertes Hosting, Deployment-Pipelines und externe Anwendungsintegrationen.