So stellen Sie die Codequalität mit SonarQube unter Ubuntu sicher 18.04

Der Autor hatInternet Archive ausgewählt, um eine Spende im Rahmen desWrite for DOnations-Programms zu erhalten.

Einführung

Code quality ist eine Annäherung daran, wie nützlich und wartbar ein bestimmter Code ist. Quality Code erleichtert die Pflege und Erweiterung Ihrer Anwendung. So können Sie sicherstellen, dass in Zukunft weniger Fehler auftreten, wenn Sie die erforderlichen Änderungen vornehmen.

SonarQube ist ein Open-Source-Tool, das bei der Analyse und Berichterstellung der Codequalität hilft. Es durchsucht Ihren Quellcode nach potenziellen Fehlern, Schwachstellen und Wartungsproblemen und zeigt die Ergebnisse in einem Bericht an, mit dem Sie potenzielle Probleme in Ihrer Anwendung identifizieren können.

Das SonarQube-Tool selbst besteht aus zwei Teilen: einem Scanner, bei dem es sich um eine Anwendung handelt, die für die Codeanalyse lokal auf dem Entwicklercomputer installiert wird, und einem zentralen Server für die Aufzeichnung und Berichterstellung. Eine einzelne SonarQube-Serverinstanz kann mehrere Scanner unterstützen, sodass Sie Codequalitätsberichte von vielen Entwicklern an einem einzigen Ort zentralisieren können.

In diesem Handbuch stellen Sie einen SonarQube-Server und -Scanner bereit, um Ihren Code zu analysieren und Codequalitätsberichte zu erstellen. Anschließend führen Sie einen Test auf Ihrem Gerät durch, indem Sie einen Beispielcode mit dem SonarQube-Scanner scannen.

Voraussetzungen

Bevor Sie mit diesem Handbuch beginnen, benötigen Sie Folgendes:

[[Schritt-1 - Vorbereitung für die Installation]] == Schritt 1 - Vorbereitung für die Installation

Sie müssen einige Schritte ausführen, um sich auf die SonarQube-Installation vorzubereiten. Da SonarQube eine Java-Anwendung ist, die als Dienst ausgeführt wird, und Sie keine Dienste alsroot-Benutzer ausführen möchten, erstellen Sie einen anderen Systembenutzer speziell für die Ausführung der SonarQube-Dienste. Danach erstellen Sie das Installationsverzeichnis und legen dessen Berechtigungen fest. Anschließend erstellen Sie eine MySQL-Datenbank und einen Benutzer für SonarQube.

Erstellen Sie zunächst den Benutzersonarqube:

sudo adduser --system --no-create-home --group --disabled-login sonarqube

Dieser Benutzer wird nur zum Ausführen des SonarQube-Dienstes verwendet. Dadurch wird ein Systembenutzer erstellt, der sich nicht direkt beim Server anmelden kann.

Erstellen Sie als Nächstes das Verzeichnis, in das SonarQube installiert werden soll:

sudo mkdir /opt/sonarqube

SonarQube-Versionen sind in einem komprimierten Format verpackt. Installieren Sie daher das Dienstprogrammunzip, mit dem Sie diese Dateien extrahieren können.

sudo apt-get install unzip

Als Nächstes erstellen Sie eine Datenbank und Anmeldeinformationen, die SonarQube verwenden wird. Melden Sie sich beim MySQL-Server als Benutzer vonrootan:

sudo mysql -u root -p

Erstellen Sie dann die SonarQube-Datenbank:

CREATE DATABASE sonarqube;

Erstellen Sie nun die Anmeldeinformationen, mit denen SonarQube auf die Datenbank zugreift.

CREATE USER sonarqube@'localhost' IDENTIFIED BY 'some_secure_password';

Erteilen Sie anschließend Berechtigungen, damit der neu erstellte Benutzer Änderungen an der SonarQube-Datenbank vornehmen kann:

GRANT ALL ON sonarqube.* to sonarqube@'localhost';

Übernehmen Sie dann die Berechtigungsänderungen und beenden Sie die MySQL-Konsole:

FLUSH PRIVILEGES;
EXIT;

Nachdem Sie den Benutzer und das Verzeichnis eingerichtet haben, werden Sie den SonarQube-Server herunterladen und installieren.

[[Schritt-2 - Herunterladen und Installieren von Sonarqube]] == Schritt 2 - Herunterladen und Installieren von SonarQube

Ändern Sie zunächst das aktuelle Arbeitsverzeichnis in das SonarQube-Installationsverzeichnis:

cd /opt/sonarqube

Gehen Sie dann zuSonarQube downloads page und greifen Sie auf den Download-Link für SonarQube 7.5 Community Edition zu. Es gibt viele Versionen und Varianten von SonarQube, die auf dieser Seite zum Download angeboten werden. In diesem speziellen Lernprogramm wird jedoch SonarQube 7.5 Community Edition verwendet.

Nachdem Sie den Link erhalten haben, laden Sie die Datei herunter:

sudo wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.5.zip

Entpacke die Datei:

sudo unzip sonarqube-7.5.zip

Löschen Sie nach dem Extrahieren der Dateien die heruntergeladene ZIP-Datei, da Sie sie nicht mehr benötigen:

sudo rm sonarqube-7.5.zip

Aktualisieren Sie abschließend die Berechtigungen, damit der Benutzer vonsonarqubediese Dateien besitzt und Dateien in diesem Verzeichnis lesen und schreiben kann:

sudo chown -R sonarqube:sonarqube /opt/sonarqube

Nachdem alle Dateien vorhanden sind, können Sie mit der Konfiguration des SonarQube-Servers fortfahren.

[[Schritt-3 - Konfigurieren des Sonarqube-Servers]] == Schritt 3 - Konfigurieren des SonarQube-Servers

Wir müssen einige Dinge in der SonarQube-Konfigurationsdatei bearbeiten. Nämlich:

  • Wir müssen den Benutzernamen und das Passwort angeben, die der SonarQube-Server für die Datenbankverbindung verwendet.

  • Außerdem müssen wir SonarQube anweisen, MySQL für unsere Back-End-Datenbank zu verwenden.

  • Wir weisen SonarQube an, im Servermodus zu arbeiten, wodurch sich die Leistung verbessert.

  • Wir werden SonarQube auch anweisen, nur die lokale Netzwerkadresse abzuhören, da wir einen Reverse-Proxy verwenden.

Öffnen Sie zunächst die SonarQube-Konfigurationsdatei:

sudo nano sonarqube-7.5/conf/sonar.properties

Ändern Sie zunächst den Benutzernamen und das Kennwort, mit denen SonarQube auf die Datenbank zugreift, auf den Benutzernamen und das Kennwort, die Sie für MySQL erstellt haben:

/opt/sonarqube/sonarqube-7.5/conf/sonar.properties

    ...

    sonar.jdbc.username=sonarqube
    sonar.jdbc.password=some_secure_password

    ...

Als Nächstes weisen Sie SonarQube an, MySQL als Datenbanktreiber zu verwenden:

/opt/sonarqube/sonarqube-7.5/conf/sonar.properties

    ...

    sonar.jdbc.url=jdbc:mysql://localhost:3306/sonarqube?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

    ...

Da diese Instanz von SonarQube als dedizierter Server ausgeführt wird, können wir die Option-serverhinzufügen, um den Servermodus von SonarQube zu aktivieren, um die Leistung zu maximieren.

Nginx übernimmt die Kommunikation zwischen den SonarQube-Clients und Ihrem Server, sodass Sie SonarQube anweisen, nur die lokale Adresse abzuhören.

/opt/sonarqube/sonarqube-7.5/conf/sonar.properties

    ...

    sonar.web.javaAdditionalOpts=-server
    sonar.web.host=127.0.0.1

Speichern und schließen Sie die Datei, sobald Sie diese Werte aktualisiert haben.

Als Nächstes konfigurieren Sie SonarQube mitSystemd so, dass es als Dienst ausgeführt wird, sodass es bei einem Neustart automatisch gestartet wird.

Erstellen Sie die Servicedatei:

sudo nano /etc/systemd/system/sonarqube.service

Fügen Sie der Datei den folgenden Inhalt hinzu, der angibt, wie der SonarQube-Dienst gestartet und beendet wird:

/etc/systemd/system/sonarqube.service

[Unit]
Description=SonarQube service
After=syslog.target network.target

[Service]
Type=forking

ExecStart=/opt/sonarqube/sonarqube-7.5/bin/linux-x86-64/sonar.sh start
ExecStop=/opt/sonarqube/sonarqube-7.5/bin/linux-x86-64/sonar.sh stop

User=sonarqube
Group=sonarqube
Restart=always

[Install]
WantedBy=multi-user.target

Weitere Informationen zu systemd-Einheitendateien finden Sie inUnderstanding Systemd Units and Unit Files.

Schließen und speichern Sie die Datei und starten Sie den SonarQube-Dienst:

sudo service sonarqube start

Überprüfen Sie den Status des SonarQube-Dienstes, um sicherzustellen, dass er gestartet wurde und wie erwartet ausgeführt wird:

service sonarqube status

Wenn der Dienst erfolgreich gestartet wurde, wird eine Zeile mit der Aufschrift "Aktiv" angezeigt.

● sonarqube.service - SonarQube service
   Loaded: loaded (/etc/systemd/system/sonarqube.service; enabled; vendor preset
   Active: active (running) since Sat 2019-01-05 19:00:00 UTC; 2s ago

Konfigurieren Sie als Nächstes den SonarQube-Dienst so, dass er beim Start automatisch gestartet wird:

sudo systemctl enable sonarqube

Zu diesem Zeitpunkt dauert es einige Minuten, bis der SonarQube-Server vollständig initialisiert ist. Sie können überprüfen, ob der Server gestartet wurde, indem Sie den HTTP-Port abfragen:

curl http://127.0.0.1:9000

Sobald der Initialisierungsvorgang abgeschlossen ist, können Sie mit dem nächsten Schritt fortfahren.

[[Schritt 4 - Konfigurieren des Reverse-Proxys]] == Schritt 4 - Konfigurieren des Reverse-Proxys

Nachdem der SonarQube-Server jetzt ausgeführt wird, ist es an der Zeit, Nginx zu konfigurieren, das als Reverse-Proxy und HTTPS-Terminator für unsere SonarQube-Instanz fungiert.

Erstellen Sie zunächst eine neue Nginx-Konfigurationsdatei für die Site:

sudo nano /etc/nginx/sites-enabled/sonarqube

Fügen Sie diese Konfiguration hinzu, damit Nginx eingehenden Datenverkehr an SonarQube weiterleitet:

/etc/nginx/sites-enabled/sonarqube

server {
    listen 80;
    server_name sonarqube.example.com;

    location / {
        proxy_pass http://127.0.0.1:9000;
    }
}

Speichern und schließen Sie die Datei.

Stellen Sie als Nächstes sicher, dass Ihre Konfigurationsdatei keine Syntaxfehler enthält:

sudo nginx -t

Wenn Sie Fehler sehen, beheben Sie diese und führen Siesudo nginx -t erneut aus. Sobald keine Fehler mehr vorliegen, starten Sie Nginx neu:

sudo service nginx restart

Für einen schnellen Test können Sie jetzthttp://sonarqube.example.com in Ihrem Webbrowser besuchen. Sie werden mit der SonarQube-Weboberfläche begrüßt.

Jetzt verwenden wir Let´s Encrypt, um HTTPS-Zertifikate für unsere Installation zu erstellen, damit die Daten sicher zwischen dem Server und Ihrem lokalen Computer übertragen werden. Verwenden Siecertbot, um das Zertifikat für Nginx zu erstellen:

sudo certbot --nginx -d sonarqube.example.com

Wenn Sie zum ersten Mal ein Let’s Encrypt-Zertifikat anfordern, fordert Certbot Sie auf, Ihre E-Mail-Adresse und die EULA-Vereinbarung einzugeben. Geben Sie Ihre E-Mail-Adresse ein und akzeptieren Sie die EULA.

Certbot fragt Sie dann, wie Sie Ihre Sicherheitseinstellungen konfigurieren möchten. Wählen Sie die Option aus, um alle Anforderungen an HTTPS umzuleiten. Dadurch wird sichergestellt, dass die gesamte Kommunikation zwischen Clients und dem SonarQube-Server verschlüsselt wird.

Nachdem wir den Reverse-Proxy eingerichtet haben, können wir unseren SonarQube-Server sichern.

[[Schritt-5 - Sichern von Sonarqube]] == Schritt 5 - Sichern von SonarQube

SonarQube wird mit einem Standard-Administrator-Benutzernamen und -Kennwort vonadmin geliefert. Dieses Standardkennwort ist nicht sicher. Sie sollten es daher aus Sicherheitsgründen auf ein sichereres Kennwort aktualisieren.

Besuchen Sie zunächst die URL Ihrer Installation und melden Sie sich mit den Standardanmeldeinformationen an. Wenn Sie aufgefordert werden, ein Lernprogramm zu starten, klicken Sie einfach aufSkip this tutorial, um zum Dashboard zu gelangen.

Klicken Sie nach dem Anmelden auf die RegisterkarteAdministration, wählen SieSecurity aus der Dropdown-Liste aus und wählen Sie dannUsers aus:

SonarQube users administration tab

Klicken Sie von hier aus auf das kleine Zahnrad rechts in der Zeile des Administratorkontos und dann auf "Passwort ändern". Stellen Sie sicher, dass Sie das Passwort so ändern, dass es leicht zu merken, aber schwer zu erraten ist.

Erstellen Sie jetzt einen normalen Benutzer, mit dem Sie Projekte erstellen und Analyseergebnisse von derselben Seite an Ihren Server senden können. Klicken Sie oben rechts auf der Seite auf die SchaltflächeCreate User:
SonarQube new user dialog

Erstellen Sie dann ein Token für einen bestimmten Benutzer, indem Sie auf die Schaltfläche in der Spalte „Tokens“ klicken und diesem Token einen Namen geben. Sie benötigen dieses Token später, wenn Sie den Codescanner aufrufen. Bewahren Sie es daher an einem sicheren Ort auf.

Schließlich stellen Sie möglicherweise fest, dass die SonarQube-Instanz für die ganze Welt offen ist und jeder die Analyseergebnisse und Ihren Quellcode anzeigen kann. Diese Einstellung ist sehr unsicher, daher konfigurieren wir SonarQube so, dass nur angemeldete Benutzer auf das Dashboard zugreifen können. Klicken Sie auf derselben RegisterkarteAdministration aufConfiguration, dann aufGeneral Settings und dann aufSecurity im linken Bereich. Schalten Sie den Schalter mit der AufschriftForce user authentication um, um die Authentifizierung zu aktivieren, und klicken Sie dann auf die SchaltflächeSave unter dem Schalter.

SonarQube Force authentication switch

Nachdem Sie den Server eingerichtet haben, richten Sie den SonarQube-Scanner ein.

[[Schritt 6 - Einrichten des Codescanners]] == Schritt 6 - Einrichten des Codescanners

Der Code-Scanner von SonarQube ist ein separates Paket, das Sie auf einem anderen Computer installieren können als dem, auf dem der SonarQube-Server ausgeführt wird, z. B. auf Ihrer lokalen Entwicklungs-Workstation oder einem Continuous Delivery-Server. Es gibt Pakete für Windows, MacOS und Linux, die Sie unterSonarQube web site finden

In diesem Lernprogramm installieren Sie den Codescanner auf demselben Server, auf dem sich unser SonarQube-Server befindet.

Erstellen Sie zunächst ein Verzeichnis für den Scanner:

sudo mkdir /opt/sonarscanner

Dann wechseln Sie in dieses Verzeichnis:

cd /opt/sonarscanner

Laden Sie den SonarQube-Scanner für Linux mitwget herunter:

sudo wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.2.0.1227-linux.zip

Als nächstes extrahieren Sie den Scanner:

sudo unzip sonar-scanner-cli-3.2.0.1227-linux.zip

Dann löschen Sie die Zip-Archivdatei:

sudo rm sonar-scanner-cli-3.2.0.1227-linux.zip

Danach müssen Sie einige Einstellungen ändern, damit der Scanner mit Ihrer Serverinstallation funktioniert. Öffnen Sie die Konfigurationsdatei zum Bearbeiten:

sudo nano sonar-scanner-3.2.0.1227-linux/conf/sonar-scanner.properties

Teilen Sie dem Scanner zunächst mit, wo er die Ergebnisse der Codeanalyse senden soll. Deaktivieren Sie die Zeile, die mitsonar.host.url beginnt, und setzen Sie sie auf die URL Ihres SonarQube-Servers:

/opt/sonarscanner/sonar-scanner-3.2.0.1227-linux/conf/sonar.properties

    sonar.host.url=https://sonarqube.example.com

Speichern und schließen Sie die Datei. Machen Sie nun die Scanner-Binärdatei ausführbar:

sudo chmod +x sonar-scanner-3.2.0.1227-linux/bin/sonar-scanner

Erstellen Sie dann eine symbolische Verknüpfung, damit Sie den Scanner aufrufen können, ohne den Pfad anzugeben:

sudo ln -s /opt/sonarscanner/sonar-scanner-3.2.0.1227-linux/bin/sonar-scanner /usr/local/bin/sonar-scanner

Nachdem der Scanner eingerichtet ist, können wir unseren ersten Code-Scan ausführen.

[[Schritt-7 - Ausführen eines Test-Scans für Sonarqube-Beispielprojekte]] == Schritt 7 - Ausführen eines Test-Scans für SonarQube-Beispielprojekte

Wenn Sie nur mit SonarQube herumstöbern möchten, um zu sehen, was es kann, können Sie einen Test-Scan fürSonarQube example projectsdurchführen. Hierbei handelt es sich um Beispielprojekte, die vom SonarQube-Team erstellt wurden und viele Probleme enthalten, die von SonarQube erkannt und gemeldet werden.

Erstellen Sie ein neues Arbeitsverzeichnis in Ihrem Ausgangsverzeichnis und wechseln Sie in das Verzeichnis:

cd ~
mkdir sonar-test && cd sonar-test

Laden Sie das Beispielprojekt herunter:

wget https://github.com/SonarSource/sonar-scanning-examples/archive/master.zip

Entpacken Sie das Projekt und löschen Sie die Archivdatei:

unzip master.zip
rm master.zip

Wechseln Sie anschließend in das Beispielprojektverzeichnis:

cd sonar-scanning-examples-master/sonarqube-scanner

Führen Sie den Scanner aus und übergeben Sie ihm das zuvor erstellte Token:

sonar-scanner -D sonar.login=your_token_here

Dies wird eine Weile dauern. Sobald der Scan abgeschlossen ist, wird auf der Konsole Folgendes angezeigt:

INFO: Task total time: 14.128 s
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 21.776s
INFO: Final Memory: 17M/130M
INFO: ------------------------------------------------------------------------

Der Bericht des Beispielprojekts wird nun wie folgt im SonarQube-Dashboard angezeigt:

SonarQube Dashboard

Nachdem Sie bestätigt haben, dass der SonarQube-Server und -Scanner mit dem Testcode arbeiten, können Sie mit SonarQube Ihren eigenen Code analysieren.

[[Schritt 8 - Ausführen eines Scans für Ihren eigenen Code]] == Schritt 8 - Ausführen eines Scans für Ihren eigenen Code

Damit SonarQube Ihren eigenen Code analysiert, übertragen Sie zunächst Ihr Projekt auf den Server, oder führen Sie Schritt 6 aus, um den SonarQube-Scanner auf Ihrer Workstation zu installieren und zu konfigurieren, und konfigurieren Sie ihn so, dass er auf Ihren SonarQube-Server verweist.

Erstellen Sie anschließend im Stammverzeichnis Ihres Projekts eine SonarQube-Konfigurationsdatei:

nano sonar-project.properties

Sie werden diese Datei verwenden, um SonarQube einige Informationen zu Ihrem Projekt mitzuteilen.

Definieren Sie zunächstproject key, eine eindeutige ID für das Projekt. Sie können alles verwenden, was Sie möchten. Diese ID muss jedoch für Ihre SonarQube-Instanz eindeutig sein:

sonar-project.properties

    # Unique ID for this project
    sonar.projectKey=foobar:hello-world

    ...

Geben Sie dann den Projektnamen und die Version an, damit SonarQube diese Informationen im Dashboard anzeigt:

sonar-project.properties

    ...

    sonar.projectName=Hello World Project
    sonar.projectVersion=1.0

    ...

Zum Schluss teilen Sie SonarQube mit, wo nach den Codedateien gesucht werden soll. Beachten Sie, dass dies relativ zu dem Verzeichnis ist, in dem sich die Konfigurationsdatei befindet. Setze es auf das aktuelle Verzeichnis:

sonar-project.properties

    # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
    sonar.sources=.

Schließen Sie und speichern Sie die Datei.

Sie können eine Codequalitätsanalyse für Ihren eigenen Code durchführen. Führen Siesonar-scanner erneut aus und übergeben Sie ihm Ihr Token:

sonar-scanner -D sonar.login=your_token_here

Nach Abschluss des Scanvorgangs wird ein ähnlicher Zusammenfassungsbildschirm angezeigt:

INFO: Task total time: 5.417 s
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 9.659s
INFO: Final Memory: 39M/112M
INFO: ------------------------------------------------------------------------

Der Codequalitätsbericht des Projekts wird nun im SonarQube-Dashboard angezeigt.

Fazit

In diesem Lernprogramm richten Sie einen SonarQube-Server und -Scanner für die Analyse der Codequalität ein. Jetzt können Sie durch einfaches Ausführen eines Scans sicherstellen, dass Ihr Code problemlos gewartet werden kann - SonarQube teilt Ihnen mit, wo die potenziellen Probleme liegen könnten!

Von hier aus möchten Sie möglicherweise dieSonarQube Scanner documentation lesen, um zu erfahren, wie Sie die Analyse auf Ihrem lokalen Entwicklungscomputer oder als Teil Ihres Erstellungsprozesses ausführen.