Spring Boot Build-Job

In diesem Beitrag soll nun ein weiterer Build-Job für den Jenkins-Server erstellt werden. Dieser Build-Job verwendet die im vorherigen Artikel beschriebene Spring Boot Anwendung. Die Anwendung habe ich etwas erweitert und einen Junit-Test hinzugefügt. Für das Projekt habe ich schon mal was vorbereitet. In der ZIP-Datei findet ihr alle für das Projekt benötigten Dateien, wie Templates, Controller sowie einen UnitTest für Spring Thymeleaf: citest.zip

Für den Build-Job benötigt  Jenkins Zugriff auf die Anwendung. Dazu müsst ihr die Anwendung in das in das zentrale Repository hochladen. Wie das geht könnt ihr auch hier nachlesen: GIT-Versions-Verwaltung.

Der neue Build-Job soll zunächst folgende Schritte automatisch durchführen:

  • Auschecken des Projekts aus dem zentralen GIT-Repository
  • Build des Projekts mit dem Build-Tool Gradle
  • Ausführen der JUNIT-Tests

In einer erweiterten Version soll der Build-Job noch folgendes können:

  • Auswertung der JUnit-Tests
  • Anzeige von Metriken für den Build-Prozess
  • Code-Analyse
  • Erzeugen eines WAR-Files
  • Automatisches Deployment in einen Application-Server bzw. Servlet-Container

Jenkins Port anpassen

Im vorherigen Kapitel (Spring Boot Anwendung) habe ich beschrieben, wie ihr eine Spring Boot Anwendung erstellen und ausführen könnt. Diese Spring Boot Anwendung enthält einen Embedded Tomcat, der auf den Standard-Port 8080 konfiguriert ist. Damit die Anwendung auf dem Rechner, auf dem der Jenkins-Server installiert ist, gestartet werden kann, müssen wir den Standard-Port des Jenkins-Server anpassen (Alternativ könnt ihr natürlich auch den Standard-Port der Spring Boot Anwendung ändern).

Der Jenkins-Server verwendet nach der Installation ebenfalls den Port 8080. Würden wir ihn dort lassen, würde es beim Start der Spring Boot Applikation zu einem Fehler wegen eines Port-Konflikts kommen. Deshalb legen wir für den Jenkins den Port auf 8180 fest.

Die folgenden Schritte müsst ihr auf dem Rechner, auf dem euer Jenkins-Server installiert ist (hier der Raspberry PI), durchführen. Am besten geht das wieder über die Kommando-Zeile.

Zuerst stoppen wir den Jenkins-Server:

sudo service jenkins stop

Die Konfigurations-Datei für den Jenkins-Server liegt unter Ubuntu-Linux unter /etc/default mit dem Namen jenkins.

Ruft zunächst die Datei mit eurem Editor auf. Z.B.:

sudo nano /etc/default/jenkins

Sucht dann den Eintrag HTTP_PORT=8080 und ersetzt den Port mit HTTP_PORT=8180. Speichert die Datei und startet den Jenkins-Server wieder mit:

sudo service jenkins start

Nun könnt ihr den Jenkins-Server in eurem Web-Browser über den Port 8180 aufrufen:

http://localhost:8180

Dann könnt ihr testen, ob sich die Spring Boot Anwendung, die wir im vorherigen Artikel erzeugt haben, auch auf dem Raspberry PI starten lässt. Dazu kopiert ihr das zusammengebaute JAR-File aus dem Verzeichnis build/libs eures Projekt von eurem Entwicklungsrechner, z.B. per SFTP, auf den Raspberry PI und startet die Anwendung aus der Kommandozeile mit:

java -jar yourApplication.jar

Wenn die Anwendung erfolgreich gestartet wurde, könnt ihr sie mit dem Web-Browser auf eurem Entwicklungsrechner aufrufen:

http://yourRaspberry:8080

Gradle Plugin konfigurieren

Für den Jenkins-Server wurde in der Standard-Installation ein Plugin für Gradle installiert. Die Installation des Plugins könnt ihr jederzeit in der Jenkins-Server-Oberfläche über Jenkins verwalten -> Plugins verwalten nachholen.

Über Jenkins verwalten -> Global Tool Configuration ruft ihr die Konfigurationsseite des Gradle Plugins auf. In der Rubrik Gradle könnt ihr mit Gradle hinzufügen eine Gradle-Installation für das Plugin hinzufügen.

Falls ihr die manuelle Installation wählt, müsst ihr einen beliebigen Namen für eure Gradle-Installation (im Beispiel myGradle) vergeben und den HOME_PATH eurer lokalen Gradle-Installation angeben. Zuvor müsst ihr natürlich Gradle, wie im Artikel Gradle installieren beschrieben, manuell auf dem Raspberry PI installiert haben.

Gradle Plugin konfigurieren

Gradle Plugin konfigurieren

Habt ihr automatisch installieren gewählt, könnt ihr eine Version von Gradle, sowie eine Installationsart auswählen. Gradle wird dann durch Jenkins automatisch installiert.

Danach speichern und fertig ist die Konfiguration des Gradle-Plugins.

Build-Job anlegen

Wechselt in der Jenkins-Oberfläche mit Jenkins -> Meine Ansichten zu euren Build-Jobs. Mit Element anlegen könnt ihr neuen Build-Job anlegen.

Build-Jobs-Ansicht

Meine Ansichten

Wählt wieder das Freestyle Software Projekt bauen und vergebt einen Namen für den Build-Job.

Freestyle Build-Job

Build-Job Start

Danach müsst ihr wieder das GIT-Repository für euer neues Projekt konfigurieren. Gebt wieder den Pfad zu eurem Projekt im GIT-Repository an. Z.B.: pi@yourraspberry:/home/pi/git/citest. Für die Credentials könnt ihr hier einfach, die im ersten Build-Job angelegten Zugangsdaten, aus der Dropdown-Liste auswählen.

Projekt Repository auswählen

GIT-Repository

Jetzt müsst ihr nur noch einen Build-Schritt in der Rubrik Build Verfahren hinzufügen. Diesmal wählt ihr hier Invoke Gradle Script. Danach markiert ihr Invoke Gradle und wählt aus der Dropdown-Liste als Gradle Version, die vorher konfigurierte Gradle-Installation aus (im Beispiel myGradle ). Als Task gebt ihr eine Gradle-Task an, z.B. build.

Build-Schritt Gradle

Gradle Build

Das war es dann auch schon. Speichert die Konfiguration und startet den Build-Job mit Jetzt bauen. Öffnet dann die Jenkins-Konsole mit einem Klick auf den kleinen Ball. Hier könnt ihr sehen, ob Jenkins noch Packages nachlädt oder ob es Fehler beim Ausführen gibt.

Ausgabe in der Konsole

Jenkins Build-Job in der Konsole

Der Build-Job führt jetzt folgende Schritte durch:

  • Auschecken des Projekts citest aus dem GIT-Repository
  • Aufruf von Gradle mit der Task build, die das Projekt kompiliert, zusammenbaut und Junit-Tests durchführt
  • Erstellen von Reports und Statistiken des Build-Verlaufs
  • Anzeige von Fehlern beim Aufruf der Junit-Tests
  • Anzeige des Verlaufs in der Konsole

Falls, z.B. beim Aufruf der Tests Fehler auftreten, wird angezeigt, in welcher Klasse und Methode der Fehler auftrat. Im Beispiel war der Fehler in der JUnit-Klasse.

Fehler in der Test-Klasse

Build failed

Auf der Hauptseite eures Build-Projekts wird euch der Build-Verlauf angezeigt. Mit Klick auf die Nummer hinter dem Bubble in der Liste Build-Verlauf, könnt ihr euch Details zum Build-Verlauf anzeigen lassen. Ihr könnt dann z.B. sehen, wann die Klasse, in der der Fehler auftrat, eingecheckt wurde und wer es verbrochen hat.

Build-Details

Build-Details

In denn Post-Build-Schritten des Build-Jobs könntet ihr jetzt im Fehlerfall z.B. Mails vom Jenkins an alle Entwickler versenden lassen.

E-Mails versenden

Post-Build

Unter Meine Ansichten könnt ihr euch mit Build-Verlauf den Status aller Builds eurer Build-Projekte anzeigen lassen.

Build-Verlauf

Build-Verlauf

Im letzten Kapitel zeige ich euch noch weitere Funktionen und nützliche Plugins für den Jenkins. Z.B. für die Code-Analyse oder dem automatischen Deployment in einen Servlet-Container, wie Tomcat.