2016-06-27 12 views
0

Dieser Beitrag enthält einige Informationen darüber, wie wir SonarQube in unseren Workflow integriert haben, indem wir Docker und Saltslack als Docker Container Configuration Management verwenden.Wie Sie SonarQube mit Docker mit Saltslack einrichten und wie Sie es von CI verwenden

Es enthält auch das Setup, das mit Gradle in Travis-CI verwendet wird, um Analyse von Code und Analyse von Pull-Anforderungen auf Github auszuführen.

Wenn Sie Verbesserungen an diesem Setup sehen, kommentieren Sie bitte!

(Wenn Docker Compose finden Sie unter https://github.com/SonarSource/docker-sonarqube. Fühlen Sie sich frei, diese Antwort hier zu halten oder kopieren Sie sie in einem SCM.)

Benötigt Docker Motor 1,9

Antwort

0

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

  1. aktivieren Gradle Plugin
  2. erstellen Benutzer bei Sonarqube und Github
  3. schreiben beschrieben Ein Bash-Skript, das die Analyse ausführt
  4. 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 
Verwandte Themen