Jenkins

Webbasiertes Continuous-Integration-System

Martin Schlüter

3 Minuten

Jenkins ist ein webbasiertes Continuous-Integration-System (CI), es startet eventbasiert oder zeitgesteuert vorgegebene Aufgabenfolgen, genannt Pipelines. Ein typisches Event ist ein webhook für eine Änderung an einem Git Repository, um dann diese Änderungen zu holen, verschiedene Tests durchzuführen und dann in eine Testumgebung oder direkt in die Produktiv Umgebung auszuspielen. Jenkins ist durch Plugins für nahezu alle Umgebungen geeignet.

Pipelines

Ich denke am besten lässt sich eine Pipeline an einem Beispiel erklären.

Also ein Git Repository für ein PHP Projekt auf einem Server mit 2 Branches, master und developement. Sobald es es eine Änderung am developement branch gibt sendet der Repository Server über einen webhook eine Meldung an Jenkins, Jenkins holt sich die Änderungen und führt verschiedene Aufgaben nacheinander durch:

  1. PHP Syntax Check
  2. alle PHPTest durchlaufen lassen
  3. Codequalität über Sonarqube checken
  4. ein Dockerimage mit dem neuen Code erstellen
  5. das Dockerimage mit einem security scanner auf Schwachstellen prüfen
  6. das neue Dockerimage in ein Docker Image Repository hochladen
  7. Kubernetes anweisen das neue Dockerimage auf der develop subdomain zur Verfügung zu stellen
  8. die Entwickler per mail, discord, Telegram etc. informieren dass die Änderungen nun zur Abnahme bereitstehen.

wenn ein Schritt fehlschlägt abbrechen und ebenfalls die Entwickler informieren. Sonarqube kann 3 verschiedene Status zurückgeben, fail, unstable und stable. Unstable bedeutet dass bestimmte Qualitätsmerkmale beim Code nicht erreicht wurden, also z.B. fehlende Kommentare in den php dateien oder die Tests nicht genug Quellcode abdecken. So kann es natürlich schonmal getestet werden, aber die Mängel noch beseitigt werden.

Bei einer Änderung am master Branch ähnliche Schritte, hier dann bei Sonarqube nur stable akzeptieren und auf einer anderen test subdomain ausspielen lassen und dann auf Freigabe warten, nach Freigabe das dockerimage in die Produktiv Umgebung ausspielen lassen.

Natürlich lassen sich auch eher banale Aufgaben durchführen lassen, z.B. zeitgesteuert jede Minute eine URL aufrufen und nach einem bestimmten Wort suchen lassen um zu testen ob die Webseite erreichbar ist, und bei einem Statuswechsel eben benachrichtigen. Aber dafür gibt es bessere Lösungen.

Für die Erstellung der Pipelines gibt es verschiedene Möglichkeiten, einmal zusammenklicken aus verschiedenen Modulen oder in Scriptform, diese Jenkins Scripte lassen sich auf dem Jenkins Server ablegen oder auch direkt im git Repository des Projekts.

Für diese Webseite nutze ich Jenkins um nach Änderungen am git Repository die Seite per HUGO neu zu generieren und auf den Webserver hochzuladen.

Jenkins

Es gibt über 1800 Plugins für Jenkins, so lässt sich Jenkins für alle vorstellbaren Umgebungen und Einsatzzwecke anpassen.

Der Jenkins Master Server kann die verschiedenen Jobs auf mehrere Slave Nodes verteilen, auch mit unterschiedlichen Betriebssystemen und kann wenn nötig auch Testumgebungen als Docker Container starten. So könnte man z.B. ein PHP Projekt mit verschiedenen PHP Versionen testen lassen.

Natürlich kommt Jenkins mit allen Programmiersprachen etc. klar, es ist ja nur ein System dass die jeweiligen Programme dann ansteuert.

Jenkins ist also ein sehr mächtiges System für CI und sonstige wiederkehrende Aufgaben.

Link: Jenkins Webseite

(476 Wörter | 3349 Zeichen)

Martins Meinung

Hier blogge ich über verschiedene Themen.