Implementierung von SonarQube in eine Spring Boot Anwendung.

Implementierung von SonarQube in eine Spring Boot Anwendung.
Was ist SonarQube?
SonarQube ist eine Open-Source-Plattform zur statischen Code-Analyse, die Entwicklern und Teams dabei hilft, die Qualität ihres Quellcodes zu überwachen und zu verbessern. Die Hauptziele von SonarQube sind die Identifizierung von Code-Smells, Bugs und Sicherheitslücken sowie die Überwachung der Code-Qualität über die Zeit.
Erstellen von docker-compose.yml
docker-compose.yml
version: "3.8"
services:
sonarqube:
container_name: sonarqube
image: sonarqube
depends_on:
- sonarqube-database
environment:
- SONARQUBE_JDBC_USERNAME=sonarqube
- SONARQUBE_JDBC_PASSWORD=sonarpass
- SONARQUBE_JDBC_URL=jdbc:postgresql://sonarqube-database:5432/sonarqube
volumes:
- sonarqube_conf:/opt/sonarqube/conf
- sonarqube_data:/opt/sonarqube/data
- sonarqube_logs:/opt/sonarqube/logs
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_bundled-plugins:/opt/sonarqube/lib/bundled-plugins
ports:
- 9000:9000
sonarqube-database:
container_name: sonarqube-database
image: postgres:12
environment:
- POSTGRES_DB=sonarqube
- POSTGRES_USER=sonarqube
- POSTGRES_PASSWORD=sonarpass
volumes:
- sonarqube_database:/var/lib/postgresql
- sonarqube_database_data:/var/lib/postgresql/data
ports:
- 5432:5432
volumes:
sonarqube_database_data:
sonarqube_bundled-plugins:
sonarqube_conf:
sonarqube_data:
sonarqube_logs:
sonarqube_database:
sonarqube_extensions:SonarQube Service
container_name: Legt den Namen des Docker-Containers für den SonarQube-Dienst fest.image: Gibt das Docker-Image an, das für den SonarQube-Dienst verwendet werden soll (in diesem Fall “sonarqube”).depends_on: Definiert die Abhängigkeit des SonarQube-Dienstes von einem anderen Dienst (sonarqube-database), um sicherzustellen, dass die Datenbank vor SonarQube gestartet wird.environment: Setzt Umgebungsvariablen für die SonarQube-Anwendung, einschließlich JDBC-Verbindungsdaten zur Verbindung mit der PostgreSQL-Datenbank.volumes: Verbindet Docker-Volumes mit spezifischen Verzeichnissen im SonarQube-Container, um Daten persistent zu speichern.ports: Macht den SonarQube-Dienst über den Port 9000 auf dem Host erreichbar.
SonarQube Database Service
container_name: Legt den Namen des Docker-Containers für die SonarQube-Datenbank fest.image: Gibt das Docker-Image für die PostgreSQL-Datenbank an.environment: Setzt Umgebungsvariablen für die Konfiguration der PostgreSQL-Datenbank.volumes: Verbindet Docker-Volumes mit Verzeichnissen im Datenbank-Container, um Daten persistent zu speichern.ports: Veröffentlicht den Datenbankdienst über den Port 5432 auf dem Host.
Volumes
Definiert verschiedene Docker-Volumes, die für die persistenten Daten des SonarQube-Dienstes und der Datenbank verwendet werden. Diese Volumes ermöglichen es, Daten zwischen Containerinstanzen beizubehalten, auch wenn die Container neu gestartet werden.
docker-compose ausführen
docker-compose up -ddocker-compose stoppen
docker-compose downEinbindung von SonarQube in Spring Boot Gradle Projekt
Die Einbindung von SonarQube in einem Spring Boot Gradle Projekt erfolgt über die Datei build.grade.
Alternativ ist dies über die Datei sonar-project.properties im Root-Verzeichnis des Projekts möglich.
Einbindung des SonarQube Plugins
plugins {
id 'org.sonarqube' version '4.4.1.3373'
}Festlegung der SonarQube Parameter
sonar {
properties {
property 'sonar.host.url', 'http://localhost:9000'
property "sonar.token", 'Your Project Token'
property "sonar.projectKey", 'Your Project Key'
property 'sonar.projectName', 'Your Project Name'
property 'sonar.sources', 'src/main'
property 'sonar.java.source', 17
property 'sonar.gradle.skipCompile', 'true'
property 'sonar.test.exclusions', 'src/test/**,src/integrationTest/**'
property 'sonar.exclusions', '**/*Generated.java,src/test,src/integrationTest'
property 'sonar.coverage.exclusions', '**/*Configuration.java,**/*Application.java'
property 'sonar.scm.disabled', 'true'
property 'encoding', 'UTF-8'
property 'charSet', 'UTF-8'
}
}Erläuterung der SonarQube Parameter
sonar.host.url: Die URL von SonarQube, zu der die Analyseergebnisse gesendet werden sollen.sonar.token: Der Projektschlüssel, der für die Authentifizierung und Autorisierung verwendet wird.- Hier sollte der Token für Ihr spezifisches Projekt angegeben werden.
sonar.projectKey: Der eindeutige Schlüssel, der das Projekt in SonarQube identifiziert.sonar.projectName: Der Name des Projekts, wie er in SonarQube angezeigt wird.sonar.sources: Das Verzeichnis, das die Quellcode-Dateien für die Analyse enthält.sonar.java.source: Die Java-Version, die für die Quellcode-Analyse verwendet wird.sonar.gradle.skipCompile: Ob die Kompilierung bei der SonarQube-Analyse übersprungen werden soll.sonar.test.exclusions: Die Verzeichnisse oder Dateipfade, die von der Test-Analyse ausgeschlossen werden sollen.sonar.exclusions: Die Verzeichnisse oder Dateipfade, die von der allgemeinen Code-Analyse ausgeschlossen werden sollen.sonar.coverage.exclusions: Dateipfade, die von der Code-Coverage-Analyse ausgeschlossen werden sollen.sonar.scm.disabled: Ob die Einbindung des Software Configuration Management (SCM) während der Analyse deaktiviert werden soll.encodingundcharSet: Festlegung der Zeichenkodierung für die Code-Analyse.
Nachdem die Analyse ausgeführt wurde, sollte das Projekt unter
http://localhost:9000 erreichbar sein.
Die default Anmeldedaten für SonarQube sind admin (Benutzername) und admin (Passwort).