Was ist Jenkins?
Die Software Jenkins kommt als webbasiertes System aus der Kategorie Continuous Integration. In der Softwareentwicklung sind die Continuous Integration und die Continuous Delivery wichtige Prozesse beziehungsweise Techniken zum kontinuierlichen und somit fortlaufenden Zusammenfügen einzelner Softwarekomponenten. Die Anwendung entsteht somit während des Entwicklungsprozesses.
Jenkins folgt dem Grundgedanken der Continuous Delivery und Continuous Integration, basiert auf Java und zeichnet sich durch eine Vielzahl an Plugins aus. Die zusätzlichen Module sorgen für eine hohe Funktionalität der Software und ermöglichen es, Anpassungen am Funktionsumfang vorzunehmen. Die Kompatibilität von Jenkins wird zudem durch die REST-basierte Programmierschnittstelle gewährleistet.
Entstehungsgeschichte von Jenkins
Jenkins wurde ab 2005 unter dem Namen Hudson von Kohsuke Kawaguchi entwickelt und fand als innovative Lösung im Bereich CI/CD schnell einen großen Anklang in der weltweiten Community. Kawaguchi war zu diesem Zeitpunkt als Entwickler für Sun Microsystems tätig. Nach der Übernahme des Unternehmens durch Oracle zu Beginn des Jahres 2010 ergaben sich Unstimmigkeiten unter anderem hinsichtlich der Lizenzen, die nicht nur den Entwickler, sondern auch die Community verärgerten.
Schlussendlich kam es zu einer Abspaltung des Projekts und Umbenennung, da Oracle die Namensrechte an Hudson hielt. Die Entwicklung wurde unter dem heutigen Namen Jenkins fortgesetzt. Eine erste Version wurde 2011 veröffentlicht. Seitdem wird Jenkins als Open Source Software unter MIT-Lizenz kontinuierlich weiterentwickelt und aktualisiert. Stand heute zählt Jenkins weltweit zu einer der bekanntesten und beliebtesten Lösung für Continuous Integration und Continuous Delivery.
Einsatzmöglichkeiten
Mit Jenkins steht eine webbasierte Open-Source-Software in Java zur Verfügung, die unterschiedlichste Aufgaben in Zusammenhang mit der kontinuierlichen Integration übernehmen kann. Nicht zuletzt die Vielzahl an verfügbaren Plugins trägt maßgeblich zur hohen Funktionalität des Systems bei.
Durch einfache und via Plugins leicht erweiterbare Architektur ermöglicht Jenkins sehr flexible und technologie-übergreifende Gestaltung der CI/CD Pipelines. Dabei wird eine Kette bestehend aus mehreren Schritten definiert, die u.a. folgende Aktionen ausführen können:
- Abrufen von Source Code aus dem Quellcode-Versioniserungssystem wie z.B. git
- Kompilierung von dem Code verschiedener Programiersprachen wie z.B. Java, C#
- Durchführung der statischen Code Analyse, z.B. via SonarQube
- Paketierung der SW Module und Verteilung auf Test- und Produktionsumgebungen
- Durchführung der entwicklungsnahen Unit- und Integration Tests
- Durchführung von End-to-End, Performance und Security Tests
Dabei kann Jenkins sowohl auf Linux als auch Windows Betriebssystemen betrieben werden und unterstützt etliche vordefinierten Technologien (durch Plugins erweiterbar), um die o.g. Schritte abzubilden, wie:
- Ausführung von Linux Shell Skripten und Windows Batch Skripten
- Ausführung von Maven, Gradle, Ant und Python Komamndos
- Publishing von Unit Test Ergebnissen
Jenkins als Test-Runner
Die oben skizierten Einsatzmöglichkeiten verdeutlichen, dass Jenkins auch im Bereich der Qualitätssicherung und Testautomatisierung eine wichtige Rolle spielt. Zwar ist es wichtig zu verstehen, dass Jenkins selbst kein Test- und Testautomatisierungswerkzeug ist, doch durch die umfangreichen Möglichkeiten exisiterende Testfälle in die CI/CD Kette einzubinden, dient Jenkins als hervorragender Test-Runner.
Dabei kann Jenkins alle Arten der Testfälle, die man mit unterschiedlichsten Testautomatisierungswerkzeugen entworfen hat, unter Einbeziehung dieser Werkzeuge ausführen und die Ergebnisse dieser Testdurchführung zentral aggregiert auf einer Dashboard anzeigen. Vorallem der letzte Punkt stellt einen wesentlichen Vorteil für das transparente und umfassende Reporting der Software Qualität in agilen Projekten und ersetzt damit immer mehr und mehr die betagten klassischen Test Management Werkzeuge.
Vorteile und Nachteile
Vorteile
- einfache Architektur und Flexibilität
- webbasiert
- Open Source
- großzügige MIT-Lizenz
- erweiterbar durch Plugins
- Individualisierung mithilfe von Plugins
- hohe Kompatibilität
- regelmäßige Aktualisierungen
Nachteile
- kein offizieller Support
- Kompatibilität und Aktualität der Plugins variiert
- keine YAML-Schnittstelle
- teils veraltete Dokumentationen
Verwandte Begriffe