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:
-
Ein Ubuntu 18.04-Server mit3GB or more-Speicher, der gemäß diesenInitial Server Setup with Ubuntu 18.04 eingerichtet wurde, einschließlich eines Sudo-Nicht-Root-Benutzers und einer Firewall.
-
Auf dem Server installiertes Oracle Java 8, konfiguriert anhand des Oracle JDK-Abschnitts inthis Oracle JDK installation tutorial.
-
Nginx und MySQL, konfiguriert durch Befolgen der Abschnitte Nginx und MySQL inthis LEMP installation guide.
-
Certbot (der Let's Encrypt-Client), konfiguriert durch Befolgen vonHow To Secure Nginx with Let’s Encrypt on Ubuntu 18.04.
-
Ein vollständig qualifizierter Domänenname und ein A-Eintrag, der auf den Server verweist, auf dem Sie SonarQube installieren möchten. Wenn Sie den DNS-Dienst von DigitalOcean verwenden, hilft Ihnenthis DNS record setup guide beim Einrichten. In diesem Lernprogramm werden
sonarqube.example.com
verwendet.
[[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-server
hinzufü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:
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:
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.
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:
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.