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

Der Autor hat dieElectronic Frontier Foundationausgewä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 besteht aus zwei Unteranwendungen: einer Analyse-Engine, die lokal auf dem Computer des Entwicklers installiert ist, 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 Computer durch, indem Sie ihn mit dem SonarQube-Tool 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

Vor der Installation von SonarQube müssen einige Schritte ausgeführt werden. Da SonarQube eine Java-Anwendung ist, die als Dienst ausgeführt wird, und da das Ausführen von Diensten alsroot-Benutzer sicherlich nicht ideal ist, erstellen wir einen anderen Systembenutzer speziell für die Ausführung der SonarQube-Dienste. Anschließend erstellen wir das Installationsverzeichnis und legen seine Berechtigungen fest. Anschließend erstellen wir eine MySQL-Datenbank und einen Benutzer für SonarQube.

Erstellen Sie zunächst einensonarqube-Benutzer:

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

Dieser Benutzer wird nur zum Ausführen des SonarQube-Dienstes verwendet. Daher erstellen wir einen Systembenutzer, der sich nicht direkt beim Server anmelden kann.

Erstellen Sie als Nächstes das Verzeichnis, in dem sich die SonarQube-Dateien befinden:

sudo mkdir /opt/sonarqube

Aktualisieren Sie nach dem Erstellen des Verzeichnisses die Berechtigungen, damit der Benutzer vonsonarqubeDateien in diesem Verzeichnis lesen und schreiben kann:

sudo chown -R sonarqube:sonarqube /opt/sonarqube

SonarQube-Versionen sind in einem komprimierten Format gepackt. Installieren Sie daher das Dienstprogrammunzipmit Ihrem Paketmanager, damit Sie die Verteilungsdateien extrahieren können:

sudo apt-get install unzip

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

mysql -u root -p

Erstellen Sie dann die SonarQube-Datenbank:

CREATE DATABASE sonarqube;
EXIT;

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

CREATE USER sonarqube@'localhost' IDENTIFIED BY 'some_secure_password';
GRANT ALL ON sonarqube.* to sonarqube@'localhost';

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 wir den Benutzer und das Verzeichnis eingerichtet haben, können Sie SonarQube selbst herunterladen und installieren.

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.0 zu. Auf der Seite stehen zwei Versionen von SonarQube zum Herunterladen zur Verfügung. In diesem speziellen Lernprogramm wird jedoch SonarQube 7.0 verwendet.

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

sudo wget https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-7.0.zip

Dann entpacke die Datei:

sudo unzip sonarqube-7.0.zip

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

sudo rm sonarqube-7.0.zip

Nachdem alle Dateien vorhanden sind, ist es an der Zeit, SonarQube zu konfigurieren.

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.

  • Wir müssen SonarQube auch anweisen, MySQL für unsere Backend-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.0/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.0/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.0/conf/sonar.properties

    ...

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

    ...

Zum Schluss weisen Sie SonarQube an, im Servermodus zu arbeiten und nur die lokale Adresse abzuhören:

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

    ...

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

Speichern und schließen Sie die Datei, sobald diese Felder aktualisiert wurden.

Als Nächstes konfigurieren wir den SonarQube-Server so, dass er als Dienst ausgeführt wird, sodass er beim Neustart des Servers 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 werden soll:

/etc/systemd/system/sonarqube.service

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

[Service]
Type=forking

ExecStart=/opt/sonarqube/sonarqube-7.0/bin/linux-x86-64/sonar.sh start
ExecStop=/opt/sonarqube/sonarqube-7.0/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 Sun 2018-03-04 01:29:44 UTC; 1 months 14 days

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

sudo systemctl enable sonarqube

Wie bei den meisten anderen Java-Anwendungen dauert die Initialisierung von SonarQube einige Zeit. Sobald der Initialisierungsvorgang abgeschlossen ist, können Sie mit dem nächsten Schritt fortfahren.

Schritt 4 - Konfigurieren des Reverse Proxy

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

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 weiterleiten kann:

/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 und sicherzustellen, dass alle an Ihren Server gesendeten Anforderungen verschlüsselt werden.

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

Schritt 5 - Sichern von SonarQube

SonarQube wird mit einem Standard-Administrator-Benutzernamen und -Kennwort vonadmin geliefert. Dieses Standardkennwort ist nicht sicher. Daher möchten wir es aus Sicherheitsgründen auf ein sichereres Kennwort aktualisieren.

Besuchen Sie zunächst die URL Ihrer Installation und melden Sie sich mit den Standardanmeldeinformationen an.

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 protokollierte Dateien zugelassen werden. in Benutzern Zugriff auf das Dashboard. Klicken Sie auf derselben Verwaltungsregisterkarte aufConfiguration und dann aufSecurity im linken Bereich. Klappen Sie den Schalter auf dieser Seite um, um eine Benutzerauthentifizierung zu erfordern.

SonarQube Force authentication switch

Nachdem wir unseren Server eingerichtet haben, richten wir den Scanner ein.

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 wird der Codescanner auf demselben Server installiert, auf dem sich unser SonarQube-Server befindet.

Erstellen Sie zunächst ein Verzeichnis für den Scanner und wechseln Sie in das neue Verzeichnis:

sudo mkdir /opt/sonarscanner
cd /opt/sonarscanner

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

sudo wget https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-3.0.3.778-linux.zip

Extrahieren Sie den Scanner und löschen Sie die ZIP-Archivdatei:

sudo unzip sonar-scanner-cli-3.0.3.778-linux.zip
sudo rm sonar-scanner-cli-3.0.3.778-linux.zip

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

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

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

/opt/sonarscanner/sonar-scanner-3.0.3.778-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.0.3.778-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.0.3.778-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 Testscans

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

Sobald der Scan abgeschlossen ist, wird auf der Konsole Folgendes angezeigt:

INFO: Task total time: 9.834 s
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 14.076s
INFO: Final Memory: 47M/112M
INFO: ------------------------------------------------------------------------

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

SonarQube Dashboard

Nachdem Sie bestätigt haben, dass sowohl der SonarQube-Server als auch der Scanner wie erwartet funktionieren, können Sie SonarQube für die Analyse Ihres eigenen Codes einsetzen.

Übertragen Sie Ihr Projekt auf den Server, oder führen Sie die Schritte in 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

Mit dieser Datei teilen Sie SonarQube einige Dinge mit, die sich auf Ihr Projekt beziehen:

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 anzeigen kann:

sonar-project.properties

    ...

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

    ...

Schließlich teilen Sie SonarQube mit, wo die Codedateien selbst gesucht werden sollen. 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 jetzt 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 sicherstellen, dass Ihr Code einfach zu warten und zu warten ist, indem Sie einfach einen Scan ausführen - SonarQube zeigt Ihnen, 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.