Guide pour installer SonarQube sur Debian 8 Jessie

SonarQube est un logiciel libre permettant de mesurer la qualité du code source en continu.

Pré-requis

  • Une machine Debian 8 Jessie avec au moins 2Go de mémoire (voir plus si possible).
  • MySQL 5.6
  • Java 8
command update-alternatives --display java
java - auto mode
  link currently points to /opt/java-oracle/jdk1.8.0_111/bin/java
/opt/java-oracle/jdk1.8.0_111/bin/java - priority 1041
Current 'best' version is '/opt/java-oracle/jdk1.8.0_111/bin/java'.


Etape 1/5 - Installation

Télécharger SonarQube en utilisant les liens directs sur leur site :
http://www.sonarqube.org/downloads/

Pour ce guide, la version 5.6.3 a été utilisée.

command wget https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-5.6.3.zip

Décompresser l’archive dans le répertoire /opt

Éditer le fichier /opt/sonarqube-5.6.3/conf/sonar.properties et modifier ces lignes :

# User credentials.
# Permissions to create tables, indices and triggers must be granted to JDBC user.
# The schema must be created first.
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
#----- Embedded Database (default)
# H2 embedded database server listening port, defaults to 9092
#sonar.embeddedDatabase.port=9092
#----- MySQL 5.6 or greater
# Only InnoDB storage engine is supported (not myISAM).
# Only the bundled driver is supported. It can not be changed.
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance


Etape 2/5 - Configuration MySQL

Créer un utilisateur « sonar » avec le mot de passe « sonar » et une base de données « sonar ».
Utiliser phpMyAdmin pour créer l’ensemble en une fois.
« Utilisateur > Ajouter un utilisateur »
Cocher la case « Créer une base portant son nom et donner à cet utilisateur tous les privilèges sur cette base. ».



Etape 3/5 - Première exécution

Pour lancer SonarQube, il faut utiliser le script correspondant à votre environnement.
Dans mon cas il se trouve dans : /opt/sonarqube-5.6.3/bin/linux-x86-64

command cd /opt/sonarqube-5.6.3/bin/linux-x86-64
command ./sonar.sh start

Dans la session ssh, effectuer un « tail -f » sur le fichier /opt/sonarqube-5.6.3/logs/sonar.log.
Cela permettra de vérifier que SonaQube se connecte bien à la base de données MySQL et installe les tables.
A vérifier également dans phpMyAdmin.

Pour arrêter SonarQube :

command cd /opt/sonarqube-5.6.3/bin/linux-x86-64
command ./sonar.sh stop


Etape 4/5 - Premier accès

Dans mon cas, j’ai utilisé une box Vagrant avec le port 9000 mappé.

config.vm.network "forwarded_port", guest: 9000, host: 9000

Donc dans mon navigateur, j’utilise cette url : http://localhost:9000

Le dashboard s’affiche au bout de quelques dizaines de secondes la première fois.
Le temps pour SonarQube d’initialiser la base de données.

La connexion par défaut est admin avec le mot de passe admin.



Etape 5/5 - SonarQube en tant que service

Je vais un peu adapter la documentation de SonarQube.
Disponible ici : http://docs.sonarqube.org/display/SONAR/Running+SonarQube+as+a+Service+on+Linux

Créer le fichier /etc/init.d/sonar :

#!/bin/sh
#
# rc file for SonarQube
#
# chkconfig: 345 96 10
# description: SonarQube system (www.sonarsource.org)
#
### BEGIN INIT INFO
# Provides: sonar
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# Short-Description: SonarQube system (www.sonarsource.org)
# Description: SonarQube system (www.sonarsource.org)
### END INIT INFO

/usr/bin/sonar $*

Créer un lien symbolic :

command ln -s /opt/sonarqube-5.6.3/bin/linux-x86-64/sonar.sh /usr/bin/sonar

Rendre le fichier /etc/init.d/sonar exécutable :

command chmod 755 /etc/init.d/sonar

Enregistrer le service :

command update-rc.d sonar defaults

Relancer la machine pour tester le démarrage automatique.

Du coup, on peut utiliser Systemd pour gérer le service :

command systemctl status sonar.service

Résultat :

? sonar.service - LSB: SonarQube system (www.sonarsource.org)
Loaded: loaded (/etc/init.d/sonar)
Active: active (running) since Wed 2016-11-02 17:17:14 CET; 4s ago
Process: 1605 ExecStop=/etc/init.d/sonar stop (code=exited, status=0/SUCCESS)
Process: 1773 ExecStart=/etc/init.d/sonar start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/sonar.service
tq1839 /opt/sonarqube-5.6.3/bin/linux-x86-64/./wrapper /opt/sonarqube-5.6.3/bin/linux-x86-64/../../conf/wrapper.conf w...
tq1841 java -Djava.awt.headless=true -Xms3m -Xmx3m -Djava.library.path=./lib -classpath ../../lib/jsw/wrapper-3.2.3.ja...
mq1864 /opt/java-oracle/jdk1.8.0_111/jre/bin/java -Djava.awt.headless=true -Xmx1G -Xms256m -Xss256k -Djava.net.preferI...

Nov 02 17:17:13 sonarqube systemd[1]: Starting LSB: SonarQube system (www.sonarsource.org)...
Nov 02 17:17:13 sonarqube sonar[1773]: Starting SonarQube...
Nov 02 17:17:14 sonarqube sonar[1773]: Started SonarQube.
Nov 02 17:17:14 sonarqube systemd[1]: Started LSB: SonarQube system (www.sonarsource.org).

Mais aussi :

command systemctl start sonar.service
command systemctl stop sonar.service
command systemctl restart sonar.service


Documentation officielle

http://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner



Remerciements 

  • Un grand merci à Jérôme pour son Mémo très complet - Le bloc-note de Jérôme Baudin - JBNet.fr