Jenkins
Jenkins ist ein Open-Source-Automatisierungsserver (aka Build Server oder CI Server), für Continuous Integration und Continuous Delivery. Jenkins ist eine Java Applikation, für die zahlreiche Plugins existiert. So kann das Tool an eine Vielzahl von Plattformen und anderen Tools angebunden werden (Toolwebsite: jenkins.io).
Generelle Ziele von CI/CD sind Stabilität, höhere Sicherheit und die Reduzierung fehlerhafter Artefakte. Manuelle Prozesse in der Fehleranalyse und während des Build Prozesses stehen dem entgegen. Genau an dieser Stelle setzt Jenkins an. Pipelines übernehmen ständig wiederkehrende Arbeiten, etwa in Form von Build Jobs und automatisierten Tests.
Beliebter Open-Source CI Server
Geschichte von Jenkins
Entwickelt wurde Jenkins von Kohsuke Kawaguchi. Der damals bei Sun tätige Java-Entwickler kreierte die Automatisierungslösung mit dem Namen „Hudson“. Nachdem Sun von Oracle aufgekauft wurde, verließ Kawaguchi das Unternehmen und führte das quelloffene Projekt unter dem Namen „Jenkins“ weiter, da Oracle die Namensrechte an Hudson hält. Den Namen „Jenkins“ (und auch der vorherige Name „Hudson“) wählte Kawaguchi, da er dies für einen gängigen Namen von britischen Butlern hielt – was natürlich als Analogie für das von ihm entwickelt Tool zu verstehen ist.
Aktive Community
Jenkins ist ein sehr gutes Beispiel dafür, dass Open-Source-Software ohne Abstriche mit proprietärer Software verglichen werden kann. Das Tool wird regelmäßig zu den beliebtesten CI Servern gezählt. Diese Popularität basiert auf diesen drei Fakten:
- Jenkins hat eine sehr große und aktive Community die das Tool weiterentwickelt.
- Die große Community entwickelt und teilt sehr viele Plugins. Dadurch gibt es für nahezu jedes denkbare Tool bereits eine Integration für Jenkins.
- Jenkins ist kostensparend, da es Open Source ist und keine Lizenzkosten anfallen.
Continuous Integration Server
Die Kernaufgabe von CI Servern ist es Builds und Tests für Softwareprojekte durchzuführen. Die Herausforderung für das Tools ist dabei, flexibel genug für unterschiedlichste Projekte und Zielplattformen zu sein.
Normalerweise zieht sich der CI Server die zu bauenden Daten aus einem Source-Code-Verwaltungssystem wie Git oder SVN nach einem Commit, führt den Build durch und deployt dann das Ergebnis.
Je nach Konfiguration kann ein Build aus mehreren Stufen bestehen und von einem ganz einfachen „Checkout – Build – Deploy“ hin zu einer Vielzahl von Schritten reichen. Eine solche Folge von Schritten wird auch als Pipeline bezeichnet.
Neben dem Build sind das Durchführen von Unit Tests und einer statische Code-Analyse übliche Schritte.
Jenkins im Cloudogu EcoSystem
Im Cloudogu EcoSystem arbeitet Jenkins mit diesen Tools zusammen:
- SCM-Manager: Das Tool verwaltet Git, Subversion und Mercurial Repositories. Über das SCM-Manager-Plugin für Jenkins können automatisch Builds bei Commits in Repositories gestartet werden.
- SonarQube: Während eines Builds kann Jenkins eine statische Code Analyse durch SonarQube starten. So können Quality Gates in den Entwicklungsprozess integriert werden. Je nach Konfiguration können Builds abhängig vom Ergebnis der Analyse fehlschlagen oder mit einer Warnung fortgesetzt werden.
- Sonatype Nexus: Build Artefakte können in dem Artefakt Repository Manager abgelegt und dokumentiert werden.
Neben der Integration mit den Tools gibt es noch weitere integrierbare Features:
- Automatische Generierung von PDF-Dokumenten aus Markdown Dokumenten: In Kombination mit dem Wiki Smeagol können so sehr einfach Dokumente erstellt und bearbeitet werden. Nach jeder Änderung wird automatisch ein PDF mit dem aktuellen Stand erzeugt.
- Durchführung von automatischen Oberflächentests: Mit dieser Bibliothek können auf Selenium basierende Testfälle einfach in die Pipeline eingebaut werden.