In den letzten zehn Jahren wurden erhebliche Fortschritte im Bereich der Entwicklung von Werkzeugen für die kontinuierliche Integration (Continuous Integration, CI) und die kontinuierliche Bereitstellung (Continuous Delivery, CD) erzielt. Die Weiterentwicklung der Technologien für die Integration von Softwareentwicklung und -betrieb (Development Operations, DevOps) hat zu einem schnellen Anstieg der Nachfrage nach CI/CD-Tools geführt. Bestehende Lösungen werden ständig verbessert, versuchen, mit der Zeit Schritt zu halten, neue Versionen erscheinen, und in der Welt der Softwarequalitätssicherung (Quality Assurance, QA) treten ständig viele neue Produkte auf. Angesichts dieser Vielzahl an Auswahlmöglichkeiten stellt die Auswahl der passenden Werkzeuge eine herausfordernde Aufgabe dar.
Unter den bestehenden CI/CD-Tools gibt es zwei Projekte, auf die man definitiv achten sollte, wenn man etwas aus diesem Bereich sucht. Es handelt sich um Jenkins und das Tool GitLab CI/CD, das Teil der GitLab-Plattform ist. Jenkins hat über Sterne auf GitHub. Das Repository von GitLab auf gitlab.com hat etwas mehr als Sterne gesammelt. Wenn man die Popularität der Repositories vergleicht, stellt man fest, dass Jenkins achtmal so viele Sterne erhalten hat wie die Plattform, zu der GitLab CI/CD gehört. Doch bei der Auswahl eines CI/CD-Tools ist dies längst nicht der einzige Indikator, auf den man achten sollte. Es gibt viele andere, und das erklärt, warum Jenkins und GitLab CI/CD in vielen Vergleichen sehr nah beieinander liegen.
Nehmen wir zum Beispiel die Daten von der Plattform G2, die Bewertungen zu sehr unterschiedlichen Produkten und die Bewertungen, die von Nutzern vergeben werden, akkumuliert. Hier liegt die durchschnittliche Bewertung , die auf 288 Bewertungen basiert, bei 4,3 Sternen. Für gibt es 270 Bewertungen, die durchschnittliche Bewertung dieses Werkzeugs beträgt 4,4 Sterne. Wir irren uns nicht, wenn wir sagen, dass Jenkins und GitLab CI/CD miteinander auf Augenhöhe konkurrieren. Interessant ist, dass das Jenkins-Projekt im Jahr 2011 ins Leben gerufen wurde und seitdem ein beliebtes Werkzeug für Tester ist. Doch das 2014 gestartete GitLab CI/CD-Projekt hat aufgrund der fortschrittlichen Funktionen dieser Plattform ebenfalls hohe Positionen eingenommen.
Wenn man die Beliebtheit von Jenkins im Vergleich zu anderen ähnlichen Plattformen betrachtet, sollten wir erwähnen, dass wir eine Umfrage durchgeführt haben, nachdem wir einen Artikel veröffentlicht haben, in dem die Plattformen Travis CI und Jenkins verglichen wurden. An der Umfrage nahmen 85 Benutzer teil. Den Befragten wurde angeboten, das CI/CD-Tool zu wählen, das ihnen am besten gefällt. 79 % wählten Jenkins, 5 % wählten Travis CI und 16 % gaben an, dass sie andere Tools bevorzugen.

Umfrageergebnisse
Unter den anderen CI/CD-Tools wurde GitLab CI/CD am häufigsten erwähnt.
Wenn Sie sich ernsthaft mit DevOps beschäftigen, müssen Sie die richtigen Werkzeuge sorgfältig auswählen, unter Berücksichtigung der Besonderheiten des Projekts, seines Budgets und anderer Anforderungen. Um Ihnen zu helfen, die richtige Wahl zu treffen, planen wir eine Analyse von Jenkins und GitLab CI/CD. Dies wird hoffentlich dazu beitragen, dass Sie die richtige Entscheidung treffen.
Einführung in Jenkins

ist ein weit bekanntes, flexibles CI/CD-Tool, das zur Automatisierung vieler Aufgaben in Softwareprojekten entwickelt wurde. Jenkins ist vollständig in Java geschrieben und wird unter der MIT-Lizenz veröffentlicht. Es bietet eine leistungsstarke Palette von Funktionen zur Automatisierung von Aufgaben, die mit dem Erstellen, Testen, Bereitstellen, Integrieren und Veröffentlichen von Software zu tun haben. Dieses Tool kann in verschiedenen Betriebssystemen verwendet werden. Dazu gehören macOS, Windows und zahlreiche Linux-Distributionen wie OpenSUSE, Ubuntu und Red Hat. Es gibt Installationspakete von Jenkins, die für verschiedene Betriebssysteme vorgesehen sind, und dieses Tool kann in Docker und in jedem System installiert werden, in dem eine JRE (Java Runtime Environment) vorhanden ist.
Die Entwickler von Jenkins haben ein weiteres Projekt, Jenkins X, ins Leben gerufen, das für den Betrieb in Kubernetes-Umgebungen ausgelegt ist. Jenkins X integriert Helm, den Jenkins CI/CD-Server, Kubernetes und andere Tools, die zur Erstellung von CI/CD-Pipelines dienen, welche den Best Practices von DevOps entsprechen. Hier wird zum Beispiel GitOps verwendet.
Zu den Vorzügen von Jenkins kann auch der Hinweis gegeben werden, dass seine Skripte sehr gut strukturiert und leicht verständlich sind, sie sind einfach zu lesen. Das Jenkins-Team hat rund 1000 Plugins erstellt, die darauf abzielen, die Interaktion von Jenkins mit den unterschiedlichsten Technologien zu organisieren. In den Skripten können Authentifizierungssysteme genutzt werden, was beispielsweise das Anmelden bei verschiedenen geschlossenen Systemen ermöglicht.
Im Laufe der Arbeit mit dem Jenkins-Workflow kann man beobachten, was in jedem seiner Schritte passiert, und ob bestimmte Arbeitsetappen erfolgreich oder nicht abgeschlossen wurden. Dies kann man zwar überwachen, ohne eine grafische Benutzeroberfläche zu verwenden, sondern mit den Möglichkeiten des Terminals.
Besonderheiten von Jenkins
Zu den allgemein bekannten Besonderheiten von Jenkins zählen die einfache Konfiguration, der hohe Automatisierungsgrad verschiedener Operationen und die hervorragende Dokumentation. Wenn es um die Lösung von DevOps-Herausforderungen geht, gilt Jenkins in der Regel als ein sehr zuverlässiges Werkzeug, bei dem es normalerweise keinen Sinn macht, den gesamten Projektverarbeitungsprozess genau zu überwachen. Bei anderen CI/CD-Tools ist das nicht der Fall. Lassen Sie uns über einige der wichtigsten Funktionen von Jenkins sprechen.
▍1. Kostenlosigkeit, Open Source, Unterstützung für zahlreiche Plattformen
Jenkins kann auf macOS-, Windows- und Linux-Plattformen betrieben werden. Außerdem kann er in einer Docker-Umgebung arbeiten, was eine einheitliche und schnelle Ausführung automatisierter Aufgaben ermöglicht. Dieses Tool kann auch als Servlet in Containern ausgeführt werden, die Java unterstützen, wie Apache Tomcat und GlassFish. Die Installation von Jenkins ist gut .
▍2. Entwickelte Plugin-Ökosystem
Das Plugin-Ökosystem von Jenkins sieht im Vergleich zu den Plugin-Ökosystemen anderer CI/CD-Tools viel entwickelter aus. Derzeit gibt es über 1500 Plugins für Jenkins. Diese Plugins sind darauf ausgerichtet, ein breites Spektrum an Aufgaben zu lösen, mit deren Hilfe sehr unterschiedliche Projekte automatisiert werden können. Die Fülle an kostenlosen Plugins bedeutet, dass Benutzer von Jenkins nicht zwingend teure kostenpflichtige Plugins erwerben müssen. Es gibt die Möglichkeit, Jenkins mit vielen DevOps-Tools zu integrieren.
▍3. Einfache Installation und Konfiguration
Jenkins lässt sich recht einfach installieren und konfigurieren. Auch der Aktualisierungsprozess des Systems ist sehr benutzerfreundlich gestaltet. Hierbei sollte erneut die Qualität der Dokumentation erwähnt werden, da man darin Antworten auf die verschiedensten Fragen zur Installation und Konfiguration von Jenkins finden kann.
▍4. Freundliche Gemeinschaft
Wie bereits erwähnt, ist Jenkins ein Open-Source-Projekt, dessen Ökosystem eine riesige Anzahl von Plugins umfasst. Um Jenkins hat sich eine große Gemeinschaft von Benutzern und Entwicklern gebildet, die die Entwicklung des Projekts unterstützen. Die Gemeinschaft ist ein Faktor, der zur Weiterentwicklung von Jenkins beiträgt.
▍5. Vorhandensein einer REST API
Im Umgang mit Jenkins kann die REST API genutzt werden, was die Möglichkeiten des Systems erweitert. Die API für den Remote-Zugriff auf das System wird in drei Varianten bereitgestellt: XML, JSON mit JSONP-Unterstützung, Python. Dokumentationsseite, die/details zur Arbeit mit der REST API von Jenkins enthält.
▍6. Unterstützung von paralleler Ausführung von Aufgaben
Jenkins unterstützt die Parallelisierung von DevOps-Aufgaben. Es lässt sich leicht mit entsprechenden Tools integrieren und ermöglicht die Benachrichtigung über die Ergebnisse der Aufgabenbearbeitung. Die Ausführung von Code-Tests kann durch die Organisation von parallelem Build des Projekts unter Verwendung verschiedener virtueller Maschinen beschleunigt werden.
▍7. Unterstützung der Arbeit in verteilten Umgebungen
Jenkins ermöglicht die Organisation von verteilten Builds unter Verwendung mehrerer Computer. Diese Funktion kommt bei großen Projekten zur Anwendung und nutzt ein Arbeitschema, bei dem es einen Hauptserver Jenkins und mehrere untergeordnete Maschinen gibt. Untergeordnete Maschinen können auch in Szenarien verwendet werden, in denen Tests des Projekts in verschiedenen Umgebungen organisiert werden müssen. Diese Möglichkeiten heben Jenkins vorteilhaft von anderen ähnlichen Projekten ab.
Einführung in GitLab

kann als eines der neuesten und beliebtesten Tools für DevOps-Ingenieure bezeichnet werden. Dieses kostenlose Open-Source-Tool ist in das Versionskontrollsystem GitLab integriert. Die GitLab-Plattform hat eine Community-Version, die Repository-Management, Tools zur Fehlerverfolgung, die Organisation von Code-Reviews und Mechanismen zur Erstellung von Dokumentationen unterstützt. Unternehmen können GitLab lokal installieren und dieses System mit Active Directory und LDAP-Servern zur sicheren Autorisierung und Authentifizierung von Benutzern verbinden.
Videoleitfaden, der Ihnen hilft zu lernen, wie Sie CI/CD-Pipelines mit den Funktionen von GitLab CI/CD erstellen.
Ursprünglich wurde GitLab CI/CD als eigenständiges Projekt veröffentlicht, aber im Jahr 2015 wurde dieses Toolset in GitLab 8.0 integriert. Ein separater GitLab CI/CD-Server kann die Arbeit von mehr als 25.000 Benutzern unterstützen. Auf der Grundlage solcher Server können Systeme mit hoher Verfügbarkeit erstellt werden.
GitLab CI/CD und das Hauptprojekt GitLab sind in Ruby und Go geschrieben. Sie wurden unter der MIT-Lizenz veröffentlicht. GitLab CI/CD unterstützt neben den grundlegenden Funktionen von CI/CD-Tools auch zusätzliche Funktionen, die beispielsweise mit der Arbeitsplanung zusammenhängen.
Die Integration von GitLab CI/CD in ein Projekt ist sehr einfach. Bei der Verwendung von GitLab CI/CD wird der Codeverarbeitungsprozess des Projekts in Phasen unterteilt, von denen jede aus mehreren Aufgaben bestehen kann, die in einer bestimmten Reihenfolge ausgeführt werden. Die Aufgaben sind feinkörnig anpassbar.
Aufgaben können parallel ausgeführt werden. Nach der Konfiguration der Sequenz von Phasen und Aufgaben ist das CI/CD-Pipeline bereit zur Nutzung. Der Fortschritt kann verfolgt werden, indem der Status der Aufgaben beobachtet wird. Daher ist die Verwendung von GitLab CI/CD sehr benutzerfreundlich, möglicherweise benutzerfreundlicher als andere ähnliche Tools.
Besonderheiten von GitLab CI/CD und GitLab
GitLab CI/CD ist eines der beliebtesten DevOps-Tools. Das Projekt zeichnet sich durch eine qualitativ hochwertige Dokumentation aus, die Funktionen sind leicht und bequem zu bedienen. Wenn Sie mit GitLab CI/CD noch nicht vertraut sind, wird Ihnen die folgende Liste von Funktionen dieses Tools einen allgemeinen Überblick darüber geben, was Sie erwarten können. Es ist zu beachten, dass viele dieser Funktionen mit der GitLab-Plattform selbst zusammenhängen, in die GitLab CI/CD integriert ist.
▍1. Popularität
GitLab CI/CD ist ein relativ neues Tool, das weit verbreitet ist. GitLab CI/CD hat sich allmählich zu einem äußerst beliebten CI/CD-Tool entwickelt, das für automatisierte Tests und die Bereitstellung von Software verwendet wird. Es ist einfach einzurichten. Außerdem ist es ein kostenloses CI/CD-Tool, das in die GitLab-Plattform integriert ist.
▍2. Unterstützung für GitLab Pages und Jekyll
Jekyll ist ein Generator für statische Websites, der im Rahmen des Systems GitLab Pages verwendet werden kann, um Websites auf der Grundlage von GitLab-Repositories zu erstellen. Das System nimmt die Ausgangsmaterialien und generiert daraus eine fertige statische Website. Das Ändern des Erscheinungsbildes und der Funktionen solcher Websites kann durch Bearbeiten der Datei _config.yml, verwendet von Jekyll.
▍3. Projektplanungsmöglichkeiten
Durch die Möglichkeit, Projektphasen zu planen, wird die Nachverfolgung von Problemen und deren Gruppierung erleichtert. Dies ermöglicht eine bessere Organisation der Projektarbeiten und die Planung ihrer Umsetzung zu einem bestimmten Datum.
▍4. Automatische Skalierung von CI-Runnern
Dank der automatischen Skalierung der Runner, die für die Ausführung bestimmter Aufgaben verantwortlich sind, lässt sich erheblich bei den Kosten für Serverressourcen sparen. Dies ist besonders wichtig, wenn es um Umgebungen geht, in denen Projekte parallel getestet werden. Außerdem ist dies für große Projekte von Bedeutung, die aus mehreren Repositories bestehen.
▍5. Werkzeuge zur Problemverfolgung
Die leistungsstarken Funktionen von GitLab zur Problemverfolgung haben dazu geführt, dass diese Plattform von vielen Open-Source-Projekten genutzt wird. GitLab CI/CD ermöglicht paralleles Testen verschiedener Codezweige. Die Testergebnisse lassen sich bequem im Systeminterface analysieren. Dies hebt GitLab CI/CD vorteilhaft von Jenkins ab.
▍6. Zugriffsbeschränkung auf Repositories
Die GitLab-Plattform unterstützt die Einschränkung des Zugriffs auf Repositories. Beispielsweise können Personen, die an einem Projekt in einem bestimmten Repository gemeinsam arbeiten, Rechte zugewiesen bekommen, die ihren Rollen entsprechen. Dies ist besonders relevant für Unternehmensprojekte.
▍7. Aktive Unterstützung der Community
Um GitLab hat sich eine aktive Community gebildet, die zur Weiterentwicklung dieser Plattform und ihrer Tools, insbesondere GitLab CI/CD, beiträgt. Die tiefe Integration von GitLab CI/CD und GitLab erleichtert unter anderem die Suche nach Antworten auf Fragen, die während der Arbeit mit GitLab CI/CD auftreten.
▍8. Unterstützung für verschiedene Versionskontrollsysteme
GitLab CI/CD ist ein System, das nicht nur mit Code funktioniert, der in GitLab-Repositories gespeichert ist. Beispielsweise kann der Code in einem GitHub-Repository gespeichert werden, während die CI/CD-Pipeline auf der Grundlage von GitLab mit GitLab CI/CD organisiert werden kann.
Vergleich von Jenkins und GitLab CI/CD
Jenkins und GitLab CI/CD sind sehr gute Werkzeuge, von denen jedes eine ordnungsgemäße Funktion des CI/CD-Pipelines gewährleisten kann. Bei einem Vergleich wird jedoch deutlich, dass sie, obwohl sie in vielerlei Hinsicht ähnlich sind, in einigen Punkten voneinander abweichen.
Eigenschaften
Jenkins
GitLab CI/CD
Offener oder geschlossener Code
Open Source
Open Source
Installation
Wird benötigt.
Nicht erforderlich, da dies eine integrierte Funktion der GitLab-Plattform ist.
Einzigartige Merkmale
Unterstützung von Plugins.
Tiefgehende Integration in das Versionsverwaltungssystem.
Bestellen
Fehlt.
Vorhanden.
Installation und Konfiguration
Verursachen keine Schwierigkeiten
Verursachen keine Schwierigkeiten
Eigenständige Bereitstellung des Systems
Dies ist die einzige Möglichkeit, das System zu verwenden.
Wird unterstützt.
Erstellung von CI/CD-Pipelines
Wird unterstützt, verwendet Jenkins Pipeline.
Wird unterstützt.
Überwachung der Anwendungsleistung
Fehlt.
Vorhanden.
Ökosystem
Es gibt über 1000 Plugins.
Das System entwickelt sich im Rahmen von GitLab weiter.
API
Unterstützt ein ausgefeiltes API-System.
Bietet APIs für eine tiefere Integration in Projekte.
Unterstützung für JavaScript
Vorhanden.
Vorhanden.
Integration mit anderen Werkzeugen
Die Integration mit anderen Werkzeugen und Plattformen (Slack, GitHub) wird unterstützt.
Zahlreiche Mittel zur Integration mit Drittanbietersystemen, insbesondere mit GitHub und Kubernetes.
Code-Qualitätskontrolle
Wird unterstützt – mithilfe des Plugins SonarQube und anderer Plugins.
Wird unterstützt.
Unterschiede zwischen Jenkins und GitLab CI/CD
Nachdem wir Jenkins und GitLab CI/CD beschrieben und verglichen haben, lassen Sie uns auf die Unterschiede dieser DevOps-Tools konzentrieren. Das Wissen über diese Unterschiede ermöglicht es, die Vorlieben derjenigen zu verstehen, die eines dieser Tools dem anderen vorziehen.
- GitLab CI/CD kann Git-Repositories vollständig kontrollieren. Es handelt sich um die Verwaltung von Branches in Repositories und einigen anderen Funktionen. Jenkins hingegen, obwohl es mit Repositories arbeiten kann, bietet nicht dasselbe Maß an Kontrolle über sie wie GitLab CI/CD.
- Jenkins ist ein kostenloses Open-Source-Projekt. Wer es wählt, stellt es selbst bereit. GitLab CI/CD hingegen ist Teil der GitLab-Plattform und ist eine fertige Lösung.
- GitLab CI/CD unterstützt ausgefeilte Aufgabenmanagement-Tools, die auf Projektebene operieren. Diese Funktion von Jenkins ist weniger ausgeprägt.
Jenkins und GitLab CI/CD: Stärken und Schwächen
Jetzt haben Sie sich ein gewisses Bild von Jenkins und GitLab CI/CD gemacht. Um Ihnen diese Werkzeuge noch näher zu bringen, lassen Sie uns ihre Stärken und Schwächen untersuchen. Wir nehmen an, dass Sie bereits eine Entscheidung getroffen haben, welches Werkzeug Sie benötigen. Wir hoffen, dieser Abschnitt hilft Ihnen, sich selbst zu prüfen.
▍Stärken von Jenkins
- Eine große Anzahl von Plugins.
- Vollständige Kontrolle über die Installation des Werkzeugs.
- Einfache Fehlersuche bei Runnern.
- Einfache Konfiguration von Knoten.
- Einfache Code-Bereitstellung.
- Sehr gutes System zur Verwaltung von Anmeldedaten.
- Flexibilität und Vielseitigkeit.
- Unterstützung verschiedener Programmiersprachen.
- Das System ist auf intuitiver Ebene verständlich.
▍Schwächen von Jenkins
- Bei der Verwendung von Plugins können Probleme auftreten.
- Die Zeit, die für die eigenständige Einrichtung von Jenkins in kleinen Projekten benötigt wird, kann unverhältnismäßig hoch sein.
- Fehlende allgemeine Analysedaten zu CI/CD-Pipelines.
▍Stärken von GitLab CI/CD
- Gute Integration mit Docker.
- Einfache Skalierung der Runner.
- Parallele Ausführung von Aufgaben innerhalb der CI/CD-Pipeline.
- Verwendung eines gerichteten azyklischen Diagramms zur Konfiguration von Aufgabenbeziehungen.
- Hohe Skalierbarkeit durch die Möglichkeit der parallelen Ausführung von Runnern.
- Einfachheit beim Hinzufügen von Aufgaben.
- Einfache Konfliktlösung.
- Zuverlässiges Sicherheitssystem.
▍Schwächen von GitLab CI/CD
- Für jede Aufgabe müssen Artefakte beschrieben und hoch- sowie heruntergeladen werden.
- Ergebnisse von Branch-Zusammenführungen können nicht vor der tatsächlichen Zusammenführung getestet werden.
- Bei der Beschreibung von Phasen der CI/CD-Pipeline können derzeit keine einzelnen Schritte hervorgehoben werden.
Ergebnisse
Sowohl Jenkins als auch GitLab CI/CD haben ihre Stärken und Schwächen. Die Entscheidung darüber, was genau zu wählen ist, hängt von den Bedürfnissen und Besonderheiten des jeweiligen Projekts ab. Jeder der heute betrachteten CI/CD-Tools weist bestimmte Besonderheiten auf, obwohl sie für dasselbe Ziel entwickelt wurden. Dabei ist Jenkins ein eigenständiges Tool, während GitLab CI/CD Teil einer Plattform zur Zusammenarbeit an Code ist.
Bei der Auswahl eines CI/CD-Systems ist es wichtig, neben den Funktionen auch die damit verbundenen Kosten sowie die gewohnte Arbeitsweise der DevOps-Ingenieure, die das Projekt unterstützen, zu berücksichtigen.
Mit welchen CI/CD-Tools arbeiten Sie?
Quelle: habr.com
