
Was sind Continuous-Integration-Tools für DevOps-Ingenieure?
DevOps ist zweifellos einer der beliebtesten Begriffe in der IT-Welt. Zu den Voraussetzungen für die Arbeit als DevOps-Ingenieur gehören Kenntnisse im Bereich der Softwareentwicklung und Wissen über deren Implementierungsprozesse. Aufgrund der Vielzahl von Technologien und der Notwendigkeit, über Spezialwissen zu verfügen, ist es wichtig, die richtigen Werkzeuge für die Arbeit auszuwählen.
Auf dem Weg zur kontinuierlichen Integration
Jeder, der aktiv in der Informationstechnologiebranche tätig ist, ist dem Begriff "kontinuierlich" schon viele Male begegnet. Das Wort für "eine Aktivität oder ein Prozess, der ununterbrochen und kontinuierlich ist", ist am häufigsten in DevOps-Teams zu finden und erscheint in der CI/CD-Lösung, die hilft, den Softwareentwicklungsprozess zu optimieren. Unter seinen verschiedenen Arten sticht das Continuous Integration-Tool hervor – das den Anfang der Erstellung von CI/CD darstellte.
Um das Wesen dieses Tools besser zu verstehen, müssen wir ein paar Jahre zurückgehen und uns an den Software-Implementierungsprozess erinnern. Damals wurde die meiste Arbeit isoliert von Entwicklern durchgeführt, ohne jegliche Automatisierung, und das Zusammenführen von Codeänderungen war schwierig und zeitaufwändig. Zu dieser Zeit gab es keine Code-Repositories und Änderungen wurden über USB-Sticks oder FTP-Server kommuniziert. Das Ergebnis einer solchen Arbeitsweise war: eine lange Zeit zur Generierung eines Implementierungspakets, fehleranfällige, manuelle und sich wiederholende Prozesse sowie ein Mangel an Anwendungstests. Die Lösung dieser Probleme war das CI-System – welches nun grundlegende DevOps-Praxis ist – das die meisten Aktivitäten automatisiert, verschiedene Entwicklungsumgebungen vereinheitlicht, den Transfer und das Testen von Änderungen erleichtert und gleichzeitig Zeit für das Team spart.
Was ist CI (kontinuierliche Integration)?
Das Grundprinzip der kontinuierlichen Integration besteht darin, Änderungen so oft und regelmäßig wie möglich in den Hauptzweig des Codes einzuführen und sie dann zu erstellen und zu testen. Der gesamte Prozess wird in einem einzigen, gemeinsamen Quellcode-Repository durchgeführt, das allen am Projekt beteiligten Personen zugänglich ist. Neben seiner Hauptfunktion als Tool für kontinuierliche Integration ist CI auch eine Lösung, die Anwendungstests nach jeder eingeführten Änderung automatisiert. Diese Praxis erweitert das Standardkonzept der Codeintegration durch Kontinuität, die häufigere Codeänderungen fördert und Ihnen ermöglicht, Fehler zu erkennen und Konflikte frühzeitig zu reduzieren. Frühes Feedback und die Automatisierung von Kompilierungs- und Testprozessen helfen, die Zeit von genehmigtem Code bis zum erfolgreichen Start in der Produktionsumgebung zu reduzieren. All diese Faktoren ermöglichen schnellere Implementierung von Updates und Korrekturen, wodurch die mittlere Erholungszeit (MTTR) reduziert wird.

Quelle: Mind the Product
Kontinuierliche Integration und kontinuierliche Lieferung
Kontinuierliche Lieferung, ein weiteres Element von CI/CD, erweitert die kontinuierliche Integration mit der automatischen Erstellung von einsatzbereiten Implementierungspaketen. Wenn wir beide Tools vergleichen, ist CI verantwortlich für Build, während CD für Release verantwortlich ist. CD automatisiert die Bereitstellung von Anwendungen nicht nur für die Produktion, sondern auch für Entwicklungs- und Testumgebungen. Der eigentliche Implementierungsprozess selbst ist jedoch manuell.
Kontinuierliche Integration, wie bereits erwähnt, ist eine Praxis, die auf dem automatischen Test jeder Änderung im Code-Repository basiert, während kontinuierliche Lieferung der Prozess ist, Änderungen an neuen Funktionen, Konfigurationen und Fehlerbehebungen vorzunehmen. CI wird sofort nach Erkennung und Herunterladen einer vom Entwickler bereitgestellten Änderung gestartet, während im kontinuierlichen Lieferprozess der Code kontinuierlich entwickelt und geliefert wird, bis der Programmierer bestätigt, dass der Code zur Auslieferung bereit ist.
Kontinuierliche Integration und kontinuierliche Lieferung arbeiten eng zusammen, erfordern jedoch ständige Tests, da das Schicksal der implementierten Anwendung von ihnen abhängt.

Quelle: Atlassian
Was sind Continuous-Integration-Tools?
Der Markt bietet viele Tools für kontinuierliche Integration, die den Softwareentwicklungsprozess ergänzen. Jedes Tool hat unterschiedliche Eigenschaften und Architektur, aber ihr gemeinsames Ziel ist es, die Qualität und Geschwindigkeit der Anwendungsbereitstellung zu erhöhen. Durch den Einsatz von kontinuierlicher Integration als Teil seiner Strategie spart das Unternehmen Zeit und Geld. Daher ist es entscheidend, das richtige Tool auszuwählen, das auf die Ziele der Organisation zugeschnitten ist. Zu den Auswahlfaktoren gehören die verfügbaren Funktionen, die Erweiterbarkeit des Tools, unterstützte Programmierplattformen und -sprachen, Kosten und Benutzerfreundlichkeit.
Das ausgewählte Tool sollte nahtlos die Hauptphasen des Integrationsprozesses durchführen, nämlich:
- Überwachen und Herunterladen von Codeänderungen,
- Erstellen neuen Codes,
- Codetests,
- Fehlerbehebung.
Der Einsatz von Continuous-Integration-Tools sorgt für die Stabilität und Sauberkeit des Codes und verhindert Konflikte wie Fehler und doppelten Code. CI kann auf zwei Arten erreicht werden – als manueller Build und als serverbasierter Build. Beide Lösungen erfüllen ihre Funktionen auf gleichem Niveau, aber die Wahl liegt bei einem bestimmten Unternehmen. Teams, die keinen CI-Server nutzen, können kontinuierliche Integration erreichen, indem sie regelmäßig Kompilationen durchführen und Skripte selbst erstellen. Ein solcher Ansatz erfordert eine größere Kontrolle über den Quellcode sowie die Test- und Freigabeprozesse. Für Teams, die die letztere Lösung nutzen, gibt es viele fertige DevOps-Tools, die die kontinuierliche Integration erleichtern.
Ein CI-Server, auch bekannt als Build-Server, wird in erster Linie für die Automatisierung und zur Überprüfung der Integrität der vom Entwickler bereitgestellten Änderung mit der aktuellen Version des Codes verwendet sowie mit allen Korrekturen und Abhängigkeiten, die von den anderen Teammitgliedern eingeführt wurden. CI-Server enthalten oft auch die Änderungshistorie, generieren Benachrichtigungen über den Fortschrittsstatus und kombinieren Informationen aus mehreren Projekten. Daher ist es wichtig, aus einer großen Anzahl verfügbarer Lösungen das richtige Tool auszuwählen, das eine stabile Plattform für laufende Programmierprojekte bietet.
Jenkins Continuous Integration
Jenkins ist eines der beliebtesten Tools, das mit Blick auf kontinuierliche Integration entwickelt wurde. Diese Open-Source-Lösung, geschrieben in Java, wird verwendet, um die Schritte des Erstellens und Testens der Anwendung zu automatisieren und macht es Entwicklern einfacher, die erforderlichen Änderungen in das Projekt zu integrieren. Jenkins ist ein plattformübergreifendes Tool, sodass es sowohl in einer lokalen Umgebung als auch in der Cloud oder mit Docker ausgeführt werden kann. Darüber hinaus verfügt es über eine große Anzahl von Plug-ins, die die Integration mit verschiedenen Plattformen ermöglichen. Allerdings erfordert die Fülle an Plug-ins in Kombination mit einer unfreundlichen grafischen Oberfläche, die sich seit Jahren nicht verändert hat, viel Arbeit und Geduld von einem DevOps-Team während der – meist nicht so einfachen – Projektkonfiguration.
Neben der Kompilierung des Projekts, der Durchführung von Unit- und Integrationstests und dem Erstellen der Anwendung kann Jenkins auch statische Codeanalysen und automatisierte Tests durchführen. Ein weiterer Vorteil dieses Tools ist seine Flexibilität und die Fähigkeit, in verteilten Umgebungen zu arbeiten. Dies ermöglicht es, mehrere Prozesse auf mehreren Maschinen gleichzeitig auszuführen, beschleunigt die Kompilierung, das Testen und die Bereitstellung von Anwendungen und erleichtert die Verteilung auf verschiedene Umgebungen erheblich. Aufgrund der großen Popularität von Jenkins weltweit hat es eine enorme Unterstützung der um es versammelten Community.
GitLab Continuous Integration
GitLab, bekannt als Repository-Versionierungs-Tool für Entwickler, bietet auch sein eigenes CI-System. Der große Vorteil dieser Lösung ist, dass sich das Repository und die Laufzeitumgebung an einem Ort befinden. Darüber hinaus verfügt das System über viele integrierte Lösungen, die die Implementierung komplexer Anwendungen ermöglichen. Die umfassende Integration mit Kubernetes und das Starten seiner Dienste (z. B. Helm) wird hauptsächlich in Anwendungen basierend auf Microservices verwendet. GitLab Runner, das Herzstück des Tools, ermöglicht das Ausführen von Aufgaben auf GitLab-Ebene und ist verantwortlich für die sichere Speicherung sensibler Daten. Es kann lokal, auf GitLab-Servern, auf lokalen Maschinen oder solchen, die von einem öffentlichen Cloud-Anbieter bereitgestellt werden, konfiguriert werden.
Die GitLab-CI-Konfiguration erfolgt über eine Datei im Hauptprojektverzeichnis namens .gitlab-ci.yml. Die YAML-Datei definiert die Phasen des Pipeline-Betriebs und die Abschnitte, die sich z. B. auf Docker-Images, Befehle und Variablen beziehen. Darüber hinaus ermöglicht die Verwendung von Docker auch den Build, die Tests und die Bereitstellung in anderen Umgebungen als der Produktion. GitLab CI überzeugt durch seine einfache Konfiguration, Klarheit der Benutzeroberfläche und aktive Unterstützung der Community.
AWS CI
Der Anbieter der größten öffentlichen Cloud bietet den AWS CodeBuild-Dienst als kontinuierliches Integrationstool für das Kompilieren des Codes, das Ausführen von Tests und das Vorbereiten des Pakets für die Implementierung der Anwendung an. Diese Lösung beseitigt die Notwendigkeit, eigene Kompilationsserver bereitzustellen, zu verwalten und zu skalieren, da sie einen eigenen, vollständig verwalteten Quellcode-Kompilierungsdienst namens CodeBuild bereitstellt. Dieser dynamisch erstellte Server skaliert kontinuierlich und automatisch, um Spitzenanforderungen einer Kompilierung zu bewältigen. Ein DevOps-Ingenieur, der AWS CodeBuild einrichtet, kann vorgefertigte Kompilierungsumgebungen für die beliebtesten Programmiersprachen verwenden (z. B. Apache, Maven) oder benutzerdefinierte Umgebungen erstellen, die ihre eigenen Kompilationstools verwenden.
CodeBuild wird im Pay-as-you-go-Modell abgerechnet, sodass Sie nur für die tatsächlich genutzten Rechenressourcen zahlen. Es gibt mehrere Möglichkeiten, das Tool zu nutzen. Amazon Web Services ermöglicht es dem Benutzer, Builds mithilfe der AWS-Managementkonsole, AWS CLI, des SDKs und des AWS CodePipeline-Dienstes zu erstellen und zu verwalten.

Quelle: Amazon
Buddy CI
Dies ist ein polnisches Produkt, das sich weltweit sehr dynamisch entwickelt. Der Hauptvorteil dieses Tools ist die kurze Einrichtungszeit des Prozesses. Dies liegt hauptsächlich an der Architektur von Buddy, die einfach und benutzerfreundlich sein sollte. Ein Standard-CI/CD-Prozess kann in ca. 10 Minuten eingerichtet werden. Dies wird durch das sehr benutzerfreundliche UX unterstützt, das sich in diesem Punkt von der Konkurrenz abhebt. Die Einfachheit von Buddy geht jedoch mit seinen enormen Möglichkeiten einher. Es unterstützt derzeit Docker, Kubernetes, die beliebtesten Sprachen und Frameworks und integriert sich mit den größten öffentlichen Cloud-Anbietern.
Die Rolle eines DevOps-Ingenieurs tritt in diesem Tool in den Hintergrund, da Buddy über einen reichen Satz vordefinierter Aktionen verfügt, die es Ihnen ermöglichen, automatische Kompilationen, Tests und Bereitstellungen zu konfigurieren, ohne Skripte schreiben zu müssen und Kenntnisse in Skriptsprachen zu haben. Point, Click und Drag and Drop – das sind die Hauptaktionen, die beim Arbeiten mit Buddy verwendet werden. Darüber hinaus bietet das Produkt viele fertige Lösungen (z. B. SSL Checker, PHP CodeSniffer, Bildkomprimierung), die nur wenige Minuten in Anspruch nehmen, während es bei anderen Tools wahrscheinlich mehrere Stunden dauern würde.

Quelle: devstyle
Kontinuierliche Integration – Bamboo
Das Tool des Unternehmens Atlassian sorgt für kontinuierliche Lieferung vom Schreiben des Codes bis zur Implementierung. Neben der integrierten umfassenden Integration mit anderen Tools dieses Herstellers – Bitbucket und Jira Software – Bamboo unterstützt alle Programmiersprachen und ermöglicht die Integration mit Technologien wie Docker, AWS CodeDeploy und Amazon S3. Die Arbeit mit diesem Tool besteht aus der Einrichtung von Elementen wie Plänen, Stufen, Jobs und Aufgaben – alles über eine klare und flexible Benutzeroberfläche. Dabei kommen dedizierte lokale und Remote-Agenten mit einem spezifischen Satz von Fähigkeiten zum Einsatz. Zudem ermöglicht Bamboo das parallele, automatische Durchführen von Tests und die Freigabe von eingebetteten Anwendungen für ausgewählte Test- oder Produktionsumgebungen. Aufgrund seiner kommerziellen Natur sorgt das Tool für Betriebsstabilität und bietet professionellen 24/7-Support.

Quelle: Atlassian
Zusammenfassung der Tools für kontinuierliche Integration
Kontinuierliche Integration ist ein wesentlicher Bestandteil der Arbeit von DevOps-Ingenieuren und Entwicklungsteams. Es fügt sich als einer der Hauptaspekte des Softwareentwicklungs- und Projektmanagementprozesses ein. Neben den Vorteilen der Prozessautomatisierung führt die Implementierung von CI zu besseren Geschäftsergebnissen. Die Organisationen, die kontinuierliche Integration effektiv nutzen, optimieren ihre personellen Ressourcen, sparen Geld und Zeit, die sie beispielsweise für Strategieplanung und Mitarbeiterentwicklung nutzen können.