Vergleich der CI / CD-Tools: Jenkins, GitLab CI, Buildbot, Drone und Concourse

Einführung

Continuous integration, delivery, and deployment sind Strategien, die dazu beitragen sollen, die Entwicklungsgeschwindigkeit und die Freisetzung gut getesteter, verwendbarer Produkte zu erhöhen. Die kontinuierliche Integration ermutigt Entwicklungsteams, ihre Änderungen frühzeitig zu testen und in eine gemeinsam genutzte Codebasis zu integrieren, um Integrationskonflikte zu minimieren. Die kontinuierliche Bereitstellung baut auf dieser Grundlage auf, indem Hindernisse auf dem Weg zur Bereitstellung oder Freigabe beseitigt werden. Die kontinuierliche Bereitstellung geht einen Schritt weiter und stellt jeden Build bereit, der die Testsuite automatisch besteht.

Während sich die obige Terminologie in erster Linie mit Strategien und Praktiken befasst, spielt das Software-Tooling eine große Rolle, damit Unternehmen diese Ziele erreichen können. CI/CD software can help teams advance new changes through a series of stages automatically to reduce the time to feedback and remove friction from the process.

In diesem Handbuch werden einige beliebte kostenlose und Open-Source-Server für kontinuierliche Integration, Bereitstellung und Bereitstellung verglichen, die die gemeinsame Softwareentwicklung erleichtern sollen. Wir werden uns Jenkins, GitLab CI, Buildbot, Drone und Concourse ansehen.

Jenkins

Jenkins ist einer der frühesten Open-Source-Server für die kontinuierliche Integration und bleibt die heute am häufigsten verwendete Option. Ursprünglich Teil desHudson-Projekts, trennten sich die Community und die Codebasis nach Markenkonflikten mit Oracle nach der Übernahme von Sun Microsystems, den ursprünglichen Entwicklern. Hudson wurde ursprünglich im Jahr 2005 veröffentlicht, während die erste Veröffentlichung als Jenkins im Jahr 2011 erfolgte.

Im Laufe der Jahre hat sich Jenkins zu einem leistungsstarken und flexiblen System zur Automatisierung softwarebezogener Aufgaben entwickelt. Jenkins selbst dient hauptsächlich als Automatisierungsframework, wobei ein Großteil der wichtigen Logik durch eine Bibliothek von Plugins implementiert wird. Alles, vom Abhören von Web-Hooks über das Ansehen von Repositorys bis hin zur Erstellung von Umgebungen und Sprachunterstützung, wird von Plugins erledigt. Dies bietet zwar ein hohes Maß an Flexibilität, Ihr CI-Prozess kann sich jedoch auf zahlreiche Plug-ins von Drittanbietern stützen, die möglicherweise anfällig sind.

Der Pipeline-Workflow von Jenkins - auch über ein Plugin verfügbar - ist eine relativ neue Erweiterung, die ab 2016 verfügbar ist. Der CI-Prozess kann entweder deklarativ oder zwingend mithilfe derGroovy language in Dateien im Repository selbst oder über Textfelder in der Jenkins-Web-Benutzeroberfläche definiert werden. Eine verbreitete Kritik an Jenkins ist, dass das Plug-in-zentrierte Konfigurationsmodell und die Fähigkeit, Pipeline- oder Build-Prozesse außerhalb von Repositorys zu definieren, es manchmal schwierig machen, eine Konfiguration auf einer anderen Jenkins-Instanz einfach zu replizieren.

Jenkins ist in Java geschrieben und unter einer MIT-Lizenz veröffentlicht. Befolgen Sie unsere Anleitung zuhow to install Jenkins on Ubuntu 16.04, um einen Jenkins-Server für Ihr Projekt zu konfigurieren.

GitLab CI

GitLab CI ist ein kontinuierliches Integrationstool, das inGitLab, einer Plattform für Hosting- und Entwicklungstools für Git-Repositorys, integriert ist. GitLab CI wurde ursprünglich als eigenständiges Projekt veröffentlicht und mit der Veröffentlichung von GitLab 8.0 im September 2015 in die Haupt-GitLab-Software integriert.

Der CI / CD-Prozess in GitLab CI wird in einer Datei im Code-Repository selbst mithilfe einer YAML-Konfigurationssyntax definiert. Die Arbeit wird dann an Maschinen verteilt, die als Läufer bezeichnet werden. Sie sind einfach einzurichten und können auf vielen verschiedenen Betriebssystemen bereitgestellt werden. Bei der Konfiguration von Läufern können Sie zwischen verschiedenen Ausführern wie Docker, Shell, VirtualBox oder Kubernet wählen, um zu bestimmen, wie die Aufgaben ausgeführt werden.

Die enge Kopplung von GitLab CI mit der GitLab-Repository-Plattform hat eindeutige Auswirkungen auf die Art und Weise, wie die Software verwendet werden kann. GitLab CI ist keine Option für Entwickler, die andere Repository-Hosting-Plattformen verwenden. Positiv zu vermerken ist, dass die integrierte Funktionalität es GitLab-Benutzern ermöglicht, eine CI / CD-Umgebung einzurichten, ohne ein zusätzliches Tool installieren und erlernen zu müssen. Automatisierte Tests können beginnen, indem Sie einige Optionen in der Weboberfläche aktivieren, einen Runner-Computer registrieren und eine Pipeline-Definitionsdatei zum Repository hinzufügen. Die enge Beziehung ermöglicht es Ihnen auch, Läufer zwischen Projekten auszutauschen, den aktuellen Erstellungsstatus im Repository automatisch anzuzeigen und Erstellungsartefakte mit dem Code, der sie erstellt hat, beizubehalten.

GitLab und GitLab CI sind in Ruby and Go geschrieben und werden unter einer MIT-Lizenz veröffentlicht. Sie können unserer Anleitung zuhow to set up continuous integration pipelines with GitLab CI folgen, um zu erfahren, wie Sie diese Funktionalität auf Ihrem GitLab-Server konfigurieren.

Buildbot

Buildbot ist ein kontinuierliches Integrationsframework, das enorme Flexibilität bietet. Buildbot wurde erstmals im Jahr 2003 als Alternative zu Mozillas Tinderbox-Projekt veröffentlicht und diente in erster Linie dazu, Build-Tests auf einer Vielzahl von Plattformen zu automatisieren.

Buildbot wird mit GPL-Lizenz veröffentlicht und in Python unter Verwendung der Twisted-Bibliothek geschrieben. Anstatt die zugrunde liegende Sprache aus Gründen der vereinfachten Konfiguration zu abstrahieren, ist die Buildbot-Konfiguration vollständig in Python geschrieben. Dies bedeutet, dass die Konfiguration in der Regel erheblich komplexer ist als bei anderen Systemen, Administratoren jedoch mehr Spielraum haben, um ihren idealen Workflow und Prozess zu gestalten. Jede Phase des Builds ist klar getrennt und programmierbar. Buildbot positioniert sich als Framework mit Tools zum Erstellen eigener benutzerdefinierter Prozesse, vergleichbar damit, wie Sie mithilfe von Webframeworks benutzerdefinierte Websites erstellen können.

Die Geschichte von Buildbot als Build-Test-Plattform bedeutet, dass es viele verschiedene Betriebssysteme und Versionskontrollsysteme unterstützt. Da es für Open-Source-Tests konzipiert wurde, können Benutzer dank seiner Architektur problemlos Mitarbeiter mit ihren bevorzugten Plattformen für Projekte anmelden, um die verfügbare Testbasis zu erweitern. Der Benutzer muss nur einige Python-Pakete auf dem System installieren und anschließend die Anmeldeinformationen für das Projekt bereitstellen.

Befolgen Sie unsere Anleitung zuhow to install Buildbot on Ubuntu 16.04, um Buildbot zur Automatisierung Ihrer Erstellungsprozesse zu verwenden.

Drohne

Drone ist eine moderne CI / CD-Plattform, die mit einer Container-First-Architektur erstellt wurde. Während die oben diskutierten Tools die Möglichkeit beinhalten, Builds mit Docker auszuführen, bildet ein container-basierter Workflow den Kern von Drones Design. Drone ist in Go geschrieben und wurde erstmals 2014 unter einer Apache-Lizenz veröffentlicht.

Drohne fungiert als mittlere Koordinationsschicht zwischen Docker und einem Repository-Anbieter. Anstatt den CI / CD-Server zu starten und sich anschließend an einen Hosting-Dienst für das Versionskontrollsystem anzuschließen, benötigt Drone die Repository-Kontoinformationen im Voraus, um seine eigenen Authentifizierungs-, Benutzer- und Berechtigungsmodelle zu booten. Wie bei allen CI-Prozessen wird Drone selbst als Container ausgeführt. Es unterstützt mehrere Datenbank-Backends und Repository-Anbieter und bietet integrierte Unterstützung für das Einrichten von TLS / SSL-Zertifikaten mitLet’s Encrypt für die Transportverschlüsselung.

Drone sucht nach speziellen YAML-Dateien in Repositorys für die Pipeline-Definition. Die Syntax ist einfach zu lesen und aussagekräftig, sodass jeder, der das Repository verwendet, den kontinuierlichen Integrationsprozess verstehen kann. Drone bietet ein Plugin-System, das jedoch anders als das in Jenkins verwendet wird. In Drone sind Plugins spezielle Docker-Container, mit denen vorkonfigurierte Aufgaben in den regulären Workflow eingefügt werden. Dies macht es einfacher, allgemeine Aufgaben zu erledigen, indem das Plugin mit wenigen Parametern aufgerufen wird, anstatt den gesamten Prozess manuell zu skripten. In diesem Sinne sind Drone-Plugins Unix-Utility-Befehlen etwas ähnlich, mit denen eine eng fokussierte Aufgabe gut erledigt werden kann.

Befolgen Sie unsere Anleitung zuhow to install and configure Drone on Ubuntu 16.04, um zu erfahren, wie Sie einen Drone-Server zum automatischen Testen Ihrer Commits einrichten.

Zusammentreffen

Concourse ist eine relativ neue Plattform für die kontinuierliche Integration, die ursprünglich im Jahr 2014 veröffentlicht wurde. Concourses Herangehensweise an den CI / CD-Bereich unterscheidet sich erheblich von den anderen von uns untersuchten Tools, indem es versucht, sich so weit wie möglich aus der Gleichung herauszulösen, den Zustand zu minimieren und jeden externen Faktor in etwas zu abstrahieren, das es "Ressourcen" nennt. . Ziel dieser Philosophie ist es, den Integrationsserver vollständig verfügbar zu machen, sodass dieselben Prozesse problemlos auf jedem Concourse-Server ausgeführt werden können.

Jeder Teil des kontinuierlichen Integrationsprozesses besteht aus Grundelementen, die verschiedene Elemente des Systems modellieren. Jeder Teil des Prozesses definiert seine Abhängigkeiten explizit. Beispielsweise erfordert die erste Aufgabe möglicherweise die letzte Festschreibung in ein VCS-Repository, während spätere Teile des Prozesses möglicherweise die letzte Festschreibungthat passed previous stageserfordern. Diese Methode zum Erstellen von Pipelines durch Abbildung der genauen Abhängigkeiten der einzelnen Schritte führt zu einem genau definierten Verhalten.

Concourse übergibt keine impliziten Daten zwischen Jobs und bietet keine interne Methode zum Speichern von Build-Artefakten, um Nebenzustände weiter aus dem Prozess zu entfernen. Alle Informationen, die für die nächste Stufe benötigt werden, müssen explizit definiert und möglicherweise an ein externes Geschäft weitergeleitet werden, um im nächsten Schritt abgerufen zu werden. Durch explizite Definitionen möchte Concourse die Anzahl der Annahmen und unbekannten Variablen, die das System berücksichtigen muss, minimieren.

Concourse wurde in Go geschrieben und unter einer Apache-Lizenz veröffentlicht. Wenn Sie erfahren möchten, wie Sie einen Concourse-Server einrichten, um Ihre kontinuierlichen Integrationsprozesse zu automatisieren, lesen Sie unseren Leitfaden zuhow to install Concourse CI on Ubuntu 16.04.

Fazit

Software für kontinuierliche Integration, Bereitstellung und Bereitstellung sind komplexe Automatisierungssysteme, mit denen Ihre Prozesse zuverlässig und wiederholbar sind. Wie Sie den obigen Beschreibungen entnehmen können, gibt es viele verschiedene Ideen, wie automatisiertes Testen und Freigeben am besten durchgeführt werden kann, wobei der Schwerpunkt auf verschiedenen Teilen der Gleichung liegt. Kein einzelnes Tool wird die Anforderungen jedes Projekts erfüllen. Bei so vielen hochwertigen Open Source-Lösungen besteht jedoch eine gute Chance, dass Sie ein System finden, das die Anforderungen Ihres Teams erfüllt.