Jenkins

von Steve Liedtke

Über mich

  • Softwareentwickler bei neusta sd (team neusta)
  • Dozent an der Hochschule Bremen (Medieninformatik)
  • Mitglied des Hackerspace Bremen e.V.

Ein Butler stellt sich vor

  • Jenkins ist ein webbasierter Integrationsserver
  • Jenkins ist in Java geschrieben und kann als Standalone oder in beliebigen Java Servlet-Containern laufen
  • Neben Java-Projekten können auch PHP, Ruby, .NET, Go oder andere Projekte gesteuert werden

Des Butlers Fähigkeiten

  • Grundkomponenten im Jenkins sind Jobs
  • Aufgabe, die unserem Butler erst erklärt werden muss
  • Jobs können zu bestimmten Zeiten, manuell oder durch Trigger ausgelöst werden

Teil der Job-Konfiguration

  • Ort von wo der Quellcode bezogen wird
  • Auslöser für einen Job-Start
  • Vorbereitung der Job-Ausführung
  • Job-Ausführung
  • Nachbereitung der Job-Ausführung

Des Butlers Aufgabenbereiche

  • Jenkins ermöglicht die Erstellung von Ansichten
  • Gruppierung mehrerer Jobs

Der Butler und sein Agent

  • Die Jobs müssen nicht auf dem Server des Jenkins ausgeführt werden
  • Sie können auch auf anderen Servern (z.B. auch mit anderem Betriebssystem) laufen
  • Hierfür stellt Jenkins ein Master/Slave Konzept bereit

Der Butler ist lernfähig

  • Jenkins lässt sich durch diverse Plugins erweitern
  • Somit sind weitere Versionskontrollsysteme, Buildautomatisierungswerkzeug, Sprachen, Reportings, etc. möglich
  • Alle eingetragenen Jenkins-Plugins: Jenkins Wiki

Installation

Mit Docker

sudo apt-get install docker.io
						
docker run -p 80:8080 -p 50000:50000 
      -v /jenkins:/var/jenkins_home -d -u root jenkins:2.4

Konfiguration

  • Um Jenkins konfigurieren zu können muss /jenkins/secrets/initialAdminPassword genutzt werden
  • Installieren von Plugins (z.B. 'suggested')
  • Admin-Nutzer anlegen

Administrativer Bereich

  • System konfigurieren
  • Globale Sicherheit konfigurieren
  • Global Tool Configuration
  • Benutzer verwalten

Jobs

Job anlegen

  • Unter 'Element anlegen'
  • Mit der Installation von Plugins können weitere Projekttypen hinzugefügt werden
    • z.B. Maven Integration Plugin

Job konfigurieren

  • General
  • Source-Code-Management
  • Build-Auslöser
  • Buildumgebung
  • Pre-Build-Schritte
  • Build
  • Post-Build-Schritte
  • Build-Einstellungen
  • Post-Build-Aktionen

Agents

Knoten hinzufügen

  • Jenkins verwalten → Knoten verwalten
  • Permanenten Knoten anlegen und konfigurieren
  • Slave starten:
sudo java -jar slave.jar
    -jnlpUrl http://<server-name>/computer/<agent_name>/slave-agent.jnlp 
    -secret <secret>

Plugins

Plugins für jede Umgebung

Unter Jenkins verwalten → Plugins verwalten findet man eine große Menge an Plugins

Anwendungsszenarien

Bauen von Software

  • Sobald ein neuer Commit im VCS durchgeführt wurde, baut Jenkins das Projekt erneut
  • Jenkins hat ein eigenes Artefakt-Management
  • Auch die Ablage des Artefakts in einem externen Artefakt-Repository ist möglich

Testen von Software

  • Nach dem Bauen eines Projektes können automatisiert Tests ausgeführt werden
  • Jenkins unterstützt bei der Visualisierung der Ergebnisse

Continuous Delivery

  • Continuous Integration, -Testing, -Reporting & -Deployment
  • Mit Pipeline Plugin realisierbar
  • Auch im Code verankerbar durch Jenkinsfile

Metriken erfassen

  • Entweder im Jenkins selber
  • Oder exportieren von Reports/Metriken an SonarQube, o.ä.

Monitoring

  • Zum Beispiel: Regelmäßige Prüfung, ob Website noch online
  • Free-Style Projekt
  • Build-Schritt: Shell → curl --silent www.steveliedtke.de

Management von Ressourcen

  • Zum Beispiel: Prüfen des Speicherplatzes auf virtuellen Server in Cloud
  • Wenn freier Speicherplatz unter 10%, dann erweitere Speicherplatz um 5 GB (über API)

Jenkins 2 vor Kurzem erschienen

  • Verbesserungen in UI
  • Rückwärtskompatibel zu 1.xxx Versionen
  • Stärkere Integration des Pipeline Plugins

Vielen Dank für eure Aufmerksamkeit!