Jenkins-Server

Jenkins ist ein Tool, das die Continuous Integration (CI) unterstützt. CI ist eine Entwicklungs-Praxis, die es erfordert, das Entwickler ihren Code regelmäßig in ein zentrales Repository übertragen. Aus dem Code im Repository wird dann regelmäßig ein zentraler Build durchgeführt, um möglichst früh Fehler beim Build zu entdecken.

Jenkins wird auf einem Server (hier unser Raspberry) installiert, auf dem der zentrale Build des Projekts durchgeführt wird. Der Build wird in unserem Beispiel mit dem Gradle-Plugin von Jenkins durchgeführt. Die Dateien zum Build des Projekts liest Jenkins mittels des GIT-Plugins aus dem zentralen Repository GIT auf unserem Raspberry. Der Workflow von Jenkins kann folgendermaßen dargestellt werden:

enkins-Workflow

Jenkins-Workflow

Jenkins Konfiguration

Für die hier verwendeten Beispiel-Builds benötigt ihr die Jenkins-Plugins für das Repository GIT und das Build-Tool Gradle. In der Jenkins-Oberfläche könnt ihr die Plugins unter Jenkins verwalten -> Plugins verwalten jederzeit hinzufügen.

Installation des Jenkins-Servers

Dazu verwende ich wieder das Terminal-Programm auf dem iMAC und verbinde mich per ssh als Benutzer pi mit dem Raspberry. Weitere Infos dazu findet ihr z.B. hier: SSH-Verbindung mit dem Raspberry.

Bei der Installation hab ich mich an dem offiziellen Guide für die Jenkins-Installation für Ubuntu – Unix (welches auch auf dem Raspberry läuft) gehalten: Jenkins installieren.

In dem Guide wird ein Java-JDK ab Version 1.7 empfohlen. Auf dem Raspberry könnt ihr die installierte Java-Version mit diesem Befehl überprüfen:

java -version

Dann solltet ihr euren Raspberry noch auf den aktuellen Stand bringen:

sudo apt-get update
sudo apt-get upgrade

Als erstes legt ihr ein Verzeichnis für Jenkins im Home-Verzeichnis an und wechselt in das Verzeichnis. Das Verzeichnis benötigt Jenkins später für die Installation der Plugins (ohne das Verzeichnis gab es Fehlermeldungen von Jenkins bei der Installation der Plugins):

mkdir Jenkins
cd Jenkins

Für die Installation der neuesten Version von Jenkins muss zunächst ein neues Repository, von dem Jenkins geladen werden kann, für den Paket-Manager des Raspberry-Betriebssystems eingetragen werden. Die Original-Paketliste des Raspberry hat mir eine alte Java-Version (Open-JDK 1.7) und einen alte Version von Jenkins installiert. Als erstes wird nun das neue Jenkins-Repository im Paket-Manager eingetragen:

wget -q -O - https://jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update

Danach könnt ihr Jenkins installieren:

sudo apt-get install jenkins

Die Installation führt folgende Schritte aus:

  • Anlegen eines Jenkins-Users und Start des Service
  • Logging in die Datei /var/log/jenkins/jenkins.log
  • Anlegen der Konfigurations-Datei unter /etc/default/jenkins
  • Jenkins-Server lauscht an Port 8080

Danach könnt ihr den Jenkins-Server in eurem Web-Browser zum ersten Mal mit der URL eures Raspberry aufrufen:

http://raspberrypi:8080

Nach kurzer Zeit sollte im Browser-Fenster diese Meldung erscheinen:

Erster Start

Danach erfolgt ein Security-Check. Auf dieser Seite werdet ihr aufgefordert, ein vom Jenkins-Installations-Programm erzeugtes Passwort einzugeben:

Security-Check

Das Passwort findet ihr in der Log-Datei /var/log/jenkins/jenkins.log:

Passwort für Security-Check

Danach habt ihr die Wahl, die gängigsten Plugins automatisch installieren zu lassen oder ihr wählt die Plugins selbst aus:

Plugins installieren

Als nächstes werdet ihr aufgefordert einen Administrator für Jenkins anzulegen:

Anlegen eines Administrators

Zum Schluss erscheint die Admin-Oberfläche von Jenkins zur weiteren Konfiguration:

Admin-Oberfläche

Deinstallation des Jenkins-Servers und der Paketliste

Um den Jenkins-Server wieder von eurem Raspberry zu entfernen müsst ihr folgende Schritte durchführen:

sudo service jenkins stop
sudo apt-get remove --purge jenkins

Kleiner Tipp am Rande, wenn ihr mal wissen möchtet, welche Pakete alle auf eurem Raspberry installiert sind, könnt ihr euch mit diesem Befehl eine Text-Datei mit allen Paketen erzeugen:

dpkg -l > installierte-pakete.txt

Um die zusätzliche Paketliste und den Key wieder los zu werden müsst ihr zusätzlich die folgenden Schritte durchführen.
Zuerst könnt ihr euch die vorhandenen Keys aller Paketlisten anzeigen lassen:

sudo apt-key list

In der dann angezeigten Liste war der Key dieser:

pub   1024D/D50582E6 2009-02-01
uid                  Kohsuke Kawaguchi <kk@kohsuke.org>
sudo apt-key del D50582E6

Danach könnt ihr den Key für die Jenkins-Paketliste löschen:

sudo apt-key del D50582E6

Zum Abschluss noch die Paketliste für Jenkins löschen:

sudo rm /etc/apt/sources.list.d/jenkins.list

Service-Kommandos für den Jenkins

In der Kommando-Zeile gibt es zum Stoppen, Start und Restart diese Kommandos für den Jenkins-Server:

sudo service jenkins stop
sudo service jenkins start
sudo service jenkins restart

Über die Jenkins-Weboberfläche geht das z.B. über die URLs:

http://yourRaspberry:8080/restart

oder

https://yourRaspberry:8080/safeRestart

Einen Update des Jenkins-Servers könnt ihr mit folgenden Befehlen durchführen:

sudo apt-get update
sudo apt-get install jenkins

Weiter geht es mit der Installation de GIT-Repository.