einen Sonarqube Server mit Salz Einrichten
für diese Säule Datei, die für Ihre Sonarqube Server:
sonar-qube:
name: sonar-qube
port: 9000
version: <ENTER SOME VERSION>
version_postgresql: <ENTER SOME VERSION>
# Using a shared disk allows you to move the SonarQube container between different servers and still keep the data.
host_storage_path: /some/shared/disk
Erstellen Sie diese sonarqube.sls
als Docker-Statusdatei.
(es erfordert, dass Sie ein Netzwerk haben, erstellt mit dem Namen sonarnet in einer Konfiguration mit dem Namen sonarnet-config konfiguriert)
{% set name = salt['pillar.get']('sonar-qube:name') %}
{% set port = salt['pillar.get']('sonar-qube:port') %}
{% set tag = salt['pillar.get']('sonar-qube:version') %}
{% set pg_tag = salt['pillar.get']('sonar-qube:version_postgresql') %}
{% set host_storage_path = salt['pillar.get']('sonar-qube:host_storage_path') %}
include:
- <state file of the sonarnet-config network definition>
sonar-qube-image:
dockerng.image_present:
- name: sonarqube:{{tag}}
sonar-qube:
dockerng.running:
- name: {{name}}
- image: sonarqube:{{tag}}
- network_mode: sonarnet
- port_bindings:
- {{port}}:{{port}}
- environment:
- SONARQUBE_JDBC_URL: jdbc:postgresql://sonar-db:5432/sonar
- binds:
- {{host_storage_path}}/sonarqube/conf:/opt/sonarqube/conf
- {{host_storage_path}}/sonarqube/data:/opt/sonarqube/data
- {{host_storage_path}}/sonarqube/extensions:/opt/sonarqube/extensions
- {{host_storage_path}}/sonarqube/lib/bundled-plugins:/opt/sonarqube/lib/bundled-plugins
- require:
- dockerng: sonarnet-config
sonar-db:
dockerng.running:
- image: postgres:{{pg_tag}}
- network_mode: sonarnet
- port_bindings:
- 5432:5432
- environment:
- POSTGRES_USER: sonar
- POSTGRES_PASSWORD: sonar
- binds:
- {{host_storage_path}}/postgresql:/var/lib/postgresql
# This needs explicit mapping due to https://github.com/docker-library/postgres/blob/4e48e3228a30763913ece952c611e5e9b95c8759/Dockerfile.template#L52
- {{host_storage_path}}/postgresql/data:/var/lib/postgresql/data
- require:
- dockerng: sonarnet-config
Verwenden regelmäßig Salz Ihre Container zu starten.
Sobald dieser SonarQube-Server gestartet wurde, sollten Sie in der Lage sein, die Web-GUI von SonarQube zu erreichen.
Execute automatisierte Analyse (mit Gradle in Travis CI)
Diese bullests wird einer nach dem anderen
- aktivieren Gradle Plugin
- erstellen Benutzer bei Sonarqube und Github
- schreiben beschrieben Ein Bash-Skript, das die Analyse ausführt
- Rufen Sie das Bash-Skript von Travis CI auf. Aktivieren
1) das Gradle Plugin
Aktivieren das Plugin gemäß Dokumentation https://plugins.gradle.org/plugin/org.sonarqube
plugins {
id "org.sonarqube" version "2.0.1"
}
2) Setup-Benutzer in Github und Sonar
Github erfordert ein Benutzer mit Schreibzugriff (bald nur Lesezugriff?) auf den Repo. Erstellen Sie einen Sonar-ci-Benutzer für ein Team und geben Sie Schreibzugriff auf das Repo für das Team. Siehe diesen Beitrag: https://github.com/janinko/ghprb/issues/232#issuecomment-149649126 Erstellen Sie dann ein Zugriffstoken für diesen Benutzer, das Zugriffstoken muss "Vollzugriff auf private Repositorys" gewähren.
Sonar erfordert einen Benutzer, der über die Berechtigung "Analyse ausführen" und "Projekte erstellen" unter Globale Berechtigungen verfügt.Es benötigt auch Berechtigungen zu "DURCHSUCHEN", "SEE SOURCE CODE" und "EXECUTE ANALYSIS" unter Projektberechtigungen. Generieren Sie ein Zugriffstoken für diesen Benutzer.
3) schreiben Bash-Skript
Dieses Skript wird eine vollständige Analyse durchführen und das Ergebnis auf der GUI Sonarqube Web zu veröffentlichen, wenn Zweig master
git verschmolzen. Dies verfolgt die Entwicklung des Codes im Laufe der Zeit. Es analysiert auch Pull-Requests in github
und schreibt seine Ergebnisse direkt als Review-Kommentare.
benötigt diese env Variablen gesetzt werden:
TRAVIS_*
- durch Travis gesetzt:
GITHUB_SONAR_TOKEN
ist das Zugriffstoken für das Sonar alaysis https://docs.travis-ci.com/user/environment-variables/
SONAR_TOKEN
ist das Zugriffstoken für den Sonar-Server sehen Benutzer auf Github
sonarqube.sh:
SONAR_URL="https://sonar.example.com"
if [ -z "$SONAR_TOKEN" ] || [ -z "$GITHUB_SONAR_TOKEN" ]; then
echo "Missing environemnt variable(s) for SonarQube. Make sure all environment variables are set."
exit 1
fi
if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then
echo "Running SonarQube analysis for pull request nr $TRAVIS_PULL_REQUEST..."
./gradlew sonarqube \
-Dsonar.host.url=$SONAR_URL \
-Dsonar.login=$SONAR_TOKEN \
-Dsonar.github.pullRequest=$TRAVIS_PULL_REQUEST \
-Dsonar.github.repository=$TRAVIS_REPO_SLUG \
-Dsonar.github.oauth=$GITHUB_SONAR_TOKEN \
-Dsonar.analysis.mode=issues
elif [ "$TRAVIS_BRANCH" == "master" ]; then
echo "Starting publish SonarQube analyzis results to $SONAR_URL"
./gradlew sonarqube \
-Dsonar.host.url=$SONAR_URL \
-Dsonar.login=$SONAR_TOKEN \
-Dsonar.analysis.mode=publish
fi
4) Integrieren von Travis CI
Im .travis.yml
add:
after_success:
- ./sonarqube.sh
before_cache:
- rm -rf $HOME/.gradle/caches/*/gradle-sonarqube-plugin
cache:
directories:
- $HOME/.sonar