Dem Teufel seine Details entlocken: Code-Qualität mit SonarQube und Jenkins checken

19. Juni 2017
Code-Qualität mit SonarQube und Jenkins  checken
Kennen Sie das auch: Das Softwareprojekt wächst und wächst. Viele kleine Komponenten fügen sich zu einem Ganzen zusammen. Alles läuft. Und plötzlich ist er da, der Bug. Dann geht die mühsame Suche im Code los. Mit dem heutigen Blogbeitrag möchte ich zeigen, wie Sie Ihre Software kontinuierlich auf Qualität checken. Schritt für Schritt richte ich dazu mit den Apps Jenkins und SonarQube ein Qualitätsmonitoring ein.

Das generelle Setting

Bei uns im Unternehmen sorgt Jenkins auf dem sogenannten CI-Server für die kontinuierliche Integration. Das Programm fügt also fortlaufend Komponenten zu ganzen Anwendungen zusammen. Was liegt da näher, als die Code-Analyse genau an dieser Stelle mit unterzubringen.
 
Für detaillierte Überprüfungen nutzen wir SonarQube. Dieses Werkzeug prüft den Sourcecode anhand verschiedener Kriterien auf Qualität und Funktionalität und stellt seine Ergebnisse ausführlich dar. Dabei ist das Tool nicht auf CI-Server oder Rechnerknoten beschränkt. Es kann auch solo verwendet werden. Einfach eine kleine Installation auf dem Entwickler-PC – fertig. Die Vorteile sind immens.
 
So können Sie sich die Integration mit Jenkins bildlich vorstellen:  
 
Der Entwickler lädt seine Änderungen in das Code Repository (VCS). Jenkins scannt das Repository regelmäßig auf Neuerungen. Wird das Tool fündig, baut es das Projekt mit den Änderungen neu auf. Nebenher laufen automatische Tests. Sozusagen als i-Tüpfelchen führt Jenkins noch den SonarQube-Scanner aus.
 
Ich kann mir fortwährend bei Jenkins den generellen Stand des Projekts anschauen. Für die teuflischen Details ziehe ich SonarQube zu Rate. Es liefert mir umfassende Reports zu Code-Qualität und möglichen Verstößen.

Scans mit Tiefenwirkung: SonarQube

Die Installation geht gut von der Hand und ist unter folgendem Link beschrieben: Get Started in Two Minutes.
 
Möchten Sie SonarQube erst einmal nur ausprobieren? Kein Problem, Sie können die einzelnen Schritte alle auch lokal ausführen. Für Webanwendungen würde ich entweder einen separaten Server aufsetzen, oder die bestehende CI-Infrastruktur verwenden. Unser SonarQube liegt beispielsweise mit auf dem Jenkins-Server. 

Jenkins – im Dienst der Qualität

  1. Am Anfang steht natürlich die Installation
  2. Dann richten Sie SonarQube als Plugin ein:
  • Auf der Benutzeroberfläche von Jenkins auf „Manage Jenkins -> Manage Plugins“ gehen
  • Unter dem Tab „Available“ nach SonarQube suchen und das Plugin installieren
  • Danach unter „Manage Jenkins -> Configure System“ unter dem Abschnitt „SonarQube-Servers“ ebendiesen Server hinterlegen:

  1. So binden Sie Ihre Projekte ein:
  • Zuerst sonar-project.properties anlegen

 

  • Denn Jedes Projekt, das geprüft werden soll, benötigt eine solche „sonar-project.properties“-Datei
  • Die kann zum Beispiel so aussehen:
# Required metadata
sonar.projectKey=apphero.web-core
sonar.projectName=AppHero > web-core
sonar.projectVersion=5.0.3

# Comma-separated paths to directories with sources (required)
sonar.sources=public/web-core
sonar.exclusions=public/web-core/lib/**

# Language
# sonar.language=js

# Encoding of sources files
sonar.sourceEncoding=UTF-8
Die SonarQube-Einstellungen lassen sich bereits lokal testen, wenn Sie SonarQube lokal installiert haben
 
  • Jetzt richten Sie ein Projekt in Jenkins ein:

 

  • In der Benutzeroberfläche auf „New Item” gehen, einen Namen vergeben und „Freestyle project“ auswählen: 

  • Mit Ihrem Repository verbinden: 

  • Und Jenkins stündlich nach Änderungen im VCS schauen lassen:

  • Ein Build einrichten (projektspezifisch und soll hier nicht erklärt werden)
  • Und schließlich den SonarQube-Aufruf konfigurieren:

 

  • Jetzt können Sie das Projekt das erste Mal bauen lassen. Sollte es dabei zu Fehlschlägen kommen, können Sie in der Console-Variante des Builds nach Details schauen
  • Wenn alles glattgegangen ist, dann zeigt Ihnen SonarQube nun alle Ihre kleinen Code-Fehler an. Zudem gibt es auf dem Jenkins-Dashboard eine kleine Ampel. Sie zeigt den generellen Build-Status an:

 

  • Mit einem Klick auf „Quality Gate“ oder „SonarQube“ landen Sie schließlich in der detaillierteren Auswertung von SonarQube:

  • Dieser Bereich – und hier besonders die Details unter „Issues“ und „Code“ – beinhaltet jede Menge nützliche Informationen für die Entwickler, um die Qualität Ihres Projekts zu optimieren

Was bringt‘s? Permanentes Qualitätsmanagement!

Durch die Integration in Jenkins wird ein Projekt in regelmäßigen Abständen oder bei Änderungen automatisch neu gebaut. Außerdem werden Tests ausgeführt und der Code wird durch SonarQube gescannt und bewertet. So steht immer eine aktuelle Auswertung der Code-Qualität bereit. Damit können Sie gut beobachten, wie sich Ihr Code entwickelt, können Schlüsse ziehen und Veränderungen anstoßen.
 
Gerade Projektleiter bekommen durch SonarQube eine Möglichkeit, die interne Qualität zu checken. Hat sie in einer stressigen Phase stark gelitten, zeigt sich das auch in SonarQube. Zudem können sie durch das Werkzeug auch schnell jene Module identifizieren, die dringend überarbeitet werden müssen.
 
Für Entwickler bietet SonarQube sehr detaillierte Beschreibungen der gefundenen Mängel. Alleine das Lesen und Verstehen der Fehler hilft nachhaltig, sauberen Code zu schreiben. Teilweise werden sogar kritische Bugs aufgedeckt, BEVOR die Software ausgerollt wurde.
 
SonarQube behebt keine Fehler und es garantiert auch nicht, dass der Code sauber und fehlerfrei ist. Doch es kann Stolperfallen aufdecken und den Finger auf die Wunde legen. Und dadurch langfristig helfen, Qualität zu sichern und zu verbessern. Die meisten Entwickler dürften allerdings einen „Oh nein, nicht diese(s) Klasse/Modul/...“-Moment haben, wenn sie das erste Mal die Datei mit den meisten Verstößen öffnen. ;-)
 
Ich hoffe, ich konnte Ihnen mit meinem „How to:“ weiterhelfen.
 
In diesem Blog erscheinen regelmäßig Beiträge, die Ihnen das Entwickler-Leben erleichtern sollen.
 

Neuen Kommentar schreiben