SonarQube déploiement 4.0

De EjnTricks

Depuis la version 4, l'éditeur ne supporte plus la génération du war et doit être exécutée avec des script utilisant le framework JSW. Cet article présente le déploiement de SonarQube, comme un fichier war, dans un le serveur d'application Tomcat 7 sur un serveur Ubuntu. L'instance est une mise à jour de la version 3.7.4


Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote


System-Install-icon.png Download-icon.png Téléchargement et installation

#sudo wget -P /tmp http://downloads.sonarsource.com/sonarqube/sonarqube-4.0.zip
#sudo unzip -d /tmp /tmp/sonarqube-4.0.zip


Icon-Configuration-Settings.png Déploiement

La mise en place de l'application s'inspire de ce qui était préalablement réalisé par script ANT.

Il faut dans un premier temps copier l'application sous le répertoire webapps de Tomcat.

#sudo service tomcat7 stop
#sudo rm -rf /var/lib/tomcat7/webapps/sonar*
#sudo mv /tmp/sonarqube-4.0/web /var/lib/tomcat7/webapps/sonar
#sudo chown -R tomcat7:tomcat7 /var/lib/tomcat7/webapps/sonar


Icon-database.png Driver base de données

Plusieurs drivers sont fournis avec la distribution. Dans les précédentes versions, tous les drivers étaient copiés dans le répertoire WEB-INF/lib de l'application. Mais il suffit de choisir le driver en fonction de la base de données utilisée. Dans le cadre de cet article, MySql est utilisé.

#sudo cp /tmp/sonarqube-4.1/extensions/jdbc-driver/mysql/*.jar /var/lib/tomcat7/webapps/sonar/WEB-INF/lib/
#sudo chown tomcat7:tomcat7 /var/lib/tomcat7/webapps/sonar/WEB-INF/lib/*.jar

A noter, le driver doit être disponible dans le répertoire WEB-INF et dans l'arborescence extensions/jdbc-driver dans l'emplacement défini par SONAR_HOME.


Update icon.png Plugin-icon.png Plugins

Des plugins principaux et complémentaires sont disponibles dans la distribution. Les premiers doivent être disponibles le répertoire lib/core-plugins. Les seconds doivent être déposés dans extensions/downloads, et seront installés lors du démarrage.

#sudo rm -rf /var/opt/sonar/extensions/jdbc-driver
#sudo rm -f /var/opt/sonar/lib/*.jar
#sudo rm -f /var/opt/sonar/lib/core-plugins/*.jar
#sudo cp -p -R /tmp/sonarqube-4.0/extensions/jdbc-driver /var/opt/sonar/extensions/jdbc-driver
#sudo cp -p /tmp/sonarqube-4.0/lib/bundled-plugins/*.jar /var/opt/sonar/extensions/downloads/
#sudo cp -p /tmp/sonarqube-4.0/lib/core-plugins/*.jar /var/opt/sonar/lib/core-plugins/
#sudo chown -R tomcat7:tomcat7 /var/opt/sonar/extensions/jdbc-driver
#sudo chown tomcat7:tomcat7 /var/opt/sonar/extensions/downloads/*.jar
#sudo chown tomcat7:tomcat7 /var/opt/sonar/lib/core-plugins/*.jar


Le plugin Quality Index est marqué comme Deprecated à partir de la version 4.0. Il suffit de placer le jar dans le répertoire /var/opt/sonar/extensions/deprecated, et il sera supprimé lors du démarrage.

#sudo mv /var/opt/sonar/extensions/plugins/sonar-quality-index-plugin-1.1.3.jar /var/opt/sonar/extensions/deprecated


Bug-icon.png Erreur

En fonction des plugins installés, une erreur peut se produire. Dans le cadre de cette installation, le plugin Cobertura était installé en version 1.3, et le plugin standard Java en version 1.4, entraînant une erreur lors du démarrage. Le message suivant est affiché dans la log sonar.log.

2015.08.26 01:25:47 ERROR o.s.s.p.PlatformLifecycleListener  Fail to start server
org.sonar.updatecenter.common.exception.IncompatiblePluginVersionException: The plugins 'cobertura' and 'java' must have exactly the same version as they belong to the same group.
        at org.sonar.updatecenter.common.PluginReferential.getParentRelease(PluginReferential.java:132) ~[sonar-update-center-common-1.8.jar:na]
        at org.sonar.updatecenter.common.PluginReferential.setParent(PluginReferential.java:120) ~[sonar-update-center-common-1.8.jar:na]
        at org.sonar.updatecenter.common.PluginReferentialManifestConverter.fromPluginManifests(PluginReferentialManifestConverter.java:54) ~[sonar-update-center-common-1.8.jar:na]
        at org.sonar.server.plugins.PluginReferentialMetadataConverter.getInstalledPluginReferential(PluginReferentialMetadataConverter.java:40) ~
[PluginReferentialMetadataConverter.class:na]
        at org.sonar.server.plugins.InstalledPluginReferentialFactory.init(InstalledPluginReferentialFactory.java:48) ~[InstalledPluginReferentialFactory.class:na]
        at org.sonar.server.plugins.InstalledPluginReferentialFactory.start(InstalledPluginReferentialFactory.java:37) ~[InstalledPluginReferentialFactory.class:na]
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_72]
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_72]
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_72]

Le plugin Cobertura est donc mis à jour.

#sudo wget -P /var/opt/sonar/extensions/downloads http://downloads.sonarsource.com/plugins/org/codehaus/sonar-plugins/sonar-cobertura-plugin/1.4/sonar-cobertura-plugin-1.4.jar
#sudo chown tomcat7:tomcat7 /var/opt/sonar/extensions/downloads/*.jar

Sur la machine, l'installation de cette version a été assez tardive. Des mises à jour de plugins étaient disponibles, remplaçant même ceux fournis dans l'instance téléchargée.

#sudo wget -P /var/opt/sonar/extensions/downloads http://downloads.sonarsource.com/plugins/org/codehaus/sonar-plugins/sonar-motion-chart-plugin/1.6/sonar-motion-chart-plugin-1.6.jar
#sudo chown tomcat7:tomcat7 /var/opt/sonar/extensions/downloads


Run-icon.png Variable d'environnement

Dans les précédente version, le fichier sonar.properties était modifié afin de spécifier la variable sonarHome utilisé dans le script ANT pour configurer la variable SONAR_HOME dans le fichier sonar-war.properties. Ce fichier est devenu obsolète et la variable doit être définie au niveau du système. Cependant, la variable SONAR_HOME est nécessaire, sans celle-ci un message d'erreur est présent dans la trace d'exécution de Tomcat.

22:10:21.864 [localhost-startStop-1] ERROR o.s.s.p.PlatformLifecycleListener - Fail to start server
java.lang.IllegalStateException: The system property or env variable SONAR_HOME is not set
        at org.sonar.server.platform.SonarHome.locate(SonarHome.java:64) ~[SonarHome.class:na]
        at org.sonar.server.platform.SonarHome$1.get(SonarHome.java:47) ~[SonarHome$1.class:na]
        at org.sonar.server.platform.SonarHome$1.get(SonarHome.java:45) ~[SonarHome$1.class:na]
        at com.google.common.base.Suppliers$MemoizingSupplier.get(Suppliers.java:109) ~[guava-10.0.1.jar:na]
        at org.sonar.server.platform.SonarHome.getHome(SonarHome.java:54) ~[SonarHome.class:na]
        at org.sonar.server.platform.PlatformLifecycleListener.configureLogback(PlatformLifecycleListener.java:64) ~[PlatformLifecycleListener.class:na]
        at org.sonar.server.platform.PlatformLifecycleListener.contextInitialized(PlatformLifecycleListener.java:34) ~[PlatformLifecycleListener.class:na]
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939) [catalina.jar:7.0.47]
        at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434) [catalina.jar:7.0.47]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [catalina.jar:7.0.47]
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) [catalina.jar:7.0.47]
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) [catalina.jar:7.0.47]
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) [catalina.jar:7.0.47]
        at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1120) [catalina.jar:7.0.47]
        at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1678) [catalina.jar:7.0.47]
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [na:1.7.0_17]
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) [na:1.7.0_17]
        at java.util.concurrent.FutureTask.run(FutureTask.java:166) [na:1.7.0_17]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [na:1.7.0_17]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [na:1.7.0_17]
        at java.lang.Thread.run(Thread.java:722) [na:1.7.0_17]

Dans le cadre de cet article, le déploiement est réalisé sous Tomcat et il est possible de modifier ces variables à partir du script setenv.sh, dans le répertoire /var/lib/tomcat7/bin, en ajoutant la ligne suivante.

export CATALINA_OPTS="-DSONAR_HOME=/var/opt/sonar -Xms1024m -Xmx1024m -XX:MaxPermSize=256m"


Sur cette instruction, la variable d'environement est ajoutée à travers un paramètre d'exécution de Java. Des ajustements sur la mémoire sont également mis en place.


Icon-database-process.png Mise à jour de la base

Pour cette version, une mise à jour de la base de données est nécessaire, ce qui est indiqué dans la trace d'exécution de Tomcat.

Database must be upgraded. Please browse /setup

Celle-ci se déclenche en accédant à l'URL http://SERVER/sonar/setup.