Sonar Update 3.4
Sommaire
Votre avis
Nobody voted on this yet
|
|
MySql version 5.6
Cette mise à jour a été réalisée très tardivement après de multiples tentatives. Entre temps, la version de MySQL est passée à 5.6 et entraîne des erreurs lors de la mise à jour de la base de données. En effet, des indexes sont créés mais sur des colonnes dont la définition entraîne un dépassement de taille sur ces indexes avec le message suivant dans la log /var/opt/sonar/logs/sonar.log
.
ActiveRecord::JDBCError: Specified key was too long; max key length is 767 bytes: CREATE INDEX `semaphore_names` ON `semaphores` (`name`) /tmp/tomcat7-tomcat7-tmp/0-sonar/WEB-INF/gems/gems/activerecord-2.3.14/lib/active_record/connection_adapters/abstract_adapter.rb:227:in `log' /tmp/tomcat7-tomcat7-tmp/0-sonar/WEB-INF/gems/gems/activerecord-jdbc-adapter-1.1.3/lib/arjdbc/jdbc/adapter.rb:183:in `execute' /tmp/tomcat7-tomcat7-tmp/0-sonar/WEB-INF/gems/gems/activerecord-2.3.14/lib/active_record/connection_adapters/abstract/schema_statements.rb:292:in `add_index' org/jruby/RubyKernel.java:2088:in `send' /tmp/tomcat7-tomcat7-tmp/0-sonar/WEB-INF/gems/gems/activerecord-2.3.14/lib/active_record/migration.rb:352:in `method_missing' /tmp/tomcat7-tomcat7-tmp/0-sonar/WEB-INF/gems/gems/activerecord-2.3.14/lib/active_record/migration.rb:328:in `say_with_time' classpath:/META-INF/jruby.home/lib/ruby/1.8/benchmark.rb:293:in `measure' /tmp/tomcat7-tomcat7-tmp/0-sonar/WEB-INF/gems/gems/activerecord-2.3.14/lib/active_record/migration.rb:328:in `say_with_time' /tmp/tomcat7-tomcat7-tmp/0-sonar/WEB-INF/gems/gems/activerecord-2.3.14/lib/active_record/migration.rb:348:in `method_missing'
Dans ce cas, il est "impossible" de déployer la version et cela nécessite des modifications manuelles. Lors d'une mise à jour, les modifications seront moindre que lors d'une installation complète. A noter que cette anomalie est prise en compte dans des versions ultérieures, ce qui a permit de lister les modifications à apporter.
Les mises de la base de données se situent dans le répertoire WEB-INF/db/migrate
. Il est préférable de modifier les scripts avant la constitution du package afin de ne pas créer les indexes automatiquement. Ce qui est d'ailleurs étonnant, c'est que MySql ne génère finalement qu'un Warning, mais est considéré comme une erreur par l'outil de mise à jour.
Les instructions suivantes doivent être commentées.
- Fichier
059_create_properties.rb
,add_index :properties, :prop_key, :name => 'properties_key'
- Fichier
062_add_project_kee_index.rb
,add_index :projects, :kee, :name => 'projects_kee'
- Fichier
151_create_dashboards.rb
,add_index :widgets, [:widget_key], :name => 'widgets_widgetkey'
- Fichier
237_create_table_resource_index.rb
,add_index 'resource_index', 'kee', :name => 'resource_index_key'
- Fichier
286_add_indices_to_resource_index.rb
,add_index 'resource_index', 'kee', :name => 'resource_index_key'
- Fichier
350_create_semaphores.rb
,add_index :semaphores, :name, :name => 'semaphore_names'
Après mise à jour, il faudra créér les indexes manuellement avec les requêtes suivantes.
CREATE INDEX `properties_key` ON `sonar`.`properties` (`prop_key`);
CREATE INDEX `projects_kee` ON `sonar`.`projects` (`kee`);
CREATE INDEX `widgets_widgetkey` ON `sonar`.`widgets` (`widget_key`);
CREATE INDEX `resource_index_key` ON `sonar`.`resource_index` (`kee`);
CREATE INDEX `semaphore_names` ON `sonar`.`semaphores` (name);
Téléchargement et installation
#sudo wget https://sonarsource.bintray.com/Distribution/sonarqube/sonar-3.4.zip #sudo unzip sonar-3.4.zip
Il faut lancer le script build-war.sh
, situé dans le répertoire war
qui va générer le fichier war à installer dans le serveur Tomcat.
Ce script permet de construire le war à déployer. Cependant, la variable d'environnement sonarHome est construite avec le fichier de configuration build.xml
.
<pathconvert targetos="unix" property="sonarHome">
<path location="${basedir}/.."/>
</pathconvert>
Donc, le répertoire de décompression "devrait" être dans un sous répertoire du "home" de Sonar. Dans le cadre de cette utilisation le "home" se situe à l'emplacement /var/opt/sonar
. Le paramétrage dans le build.xml
<pathconvert targetos="unix" property="sonarHome">
<!-- <path location="${basedir}/.."/> -->
<path location="/var/opt/sonar"/>
</pathconvert>
#./build-war.sh Buildfile: build.xml clean: war: [mkdir] Created dir: /tmp/install/sonar/sonar-3.4/war/build/sonar-server [copy] Copying 2257 files to /tmp/install/sonar/sonar-3.4/war/build/sonar-server [copy] Copying 3 files to /tmp/install/sonar/sonar-3.4/war/build/sonar-server/WEB-INF/lib [war] Building war: /tmp/install/sonar/sonar-3.4/war/sonar.war [echo] [echo] ------------------------------------------------------------------------------------------------------------------ [echo] sonar.war is ready to be deployed. It is linked by default to the Sonar home directory: [echo] /var/opt/sonar [echo] Each machine on which the sonar.war archive is going to be deployed should have locally this Sonar home directory. [echo] This directory is used by Sonar for instance to store Sonar plugins. [echo] This is possible to override this default Sonar home directory by defining the SONAR_HOME environment variable [echo] [echo] IMPORTANT NOTES : [echo] * Supported web servers are Jetty and Tomcat 5.x/6.x/7.x [echo] * The war file must be rebuilt in case of sonar upgrade [echo] ------------------------------------------------------------------------------------------------------------------ [echo] BUILD SUCCESSFUL Total time: 7 seconds
Le fichier sonar-war.properties
dans WEB-INF/classes
dans le war doit contenir la valeur du "home" modifié précédement:
# This file is used only when deploying the webapp to an application server.
# It is ignored when using the standalone mode shipped by default.
# Path to Sonar installation directory, if the environment variable/system property SONAR_HOME is not defined
SONAR_HOME=/var/opt/sonar
L'installation du war s'effectue par simple copie dans le répertoire webapps
de Tomcat.
#sudo rm -rf /var/lib/tomcat6/webapps/sonar* #sudo cp sonar.war /var/lib/tomcat6/webapps/ #sudo chown tomcat6:tomcat6 /var/lib/tomcat6/webapps/sonar.war
Plugins
Il faut ensuite mettre à jour les extensions et plugins installés. Ceux-ci se trouvent dans le "home" spécifié au niveau du fichier sonar-war.properties
. Attention à ne pas supprimer les extensions téléchargées dans le répertoire SONAR_HOME/extensions/plugins/
, soit /var/opt/sonar/extensions/plugins
.
#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 -r extensions/jdbc-driver /var/opt/sonar/extensions/jdbc-driver #sudo cp lib/*.jar /var/opt/sonar/lib #sudo cp lib/core-plugins/*.jar /var/opt/sonar/lib/core-plugins #sudo chown -R tomcat6:tomcat6 /var/opt/sonar/extensions/* #sudo chown tomcat6:tomcat6 /var/opt/sonar/lib/*.jar #sudo chown tomcat6:tomcat6 /var/opt/sonar/lib/core-plugins/*.jar
Attention, de nombreux changements ont été mis en place sur cette version. La gestion des règles est déléguée à des plugins indépendants. Ceux-ci sont placés dans le répertoire extensions/downloads
, prêt à être installés au premier démarrage de Sonar. Tout fonctionne très bien lorsque l'on utilise les scripts de démarrage, mais nécessite des opérations supplémentaires lors d'un déploiement sous forme de war.
#sudo cp extensions/downloads/*.jar /var/opt/sonar/extensions/downloads/ #sudo chown -R tomcat6:tomcat6 /var/opt/sonar/extensions/downloads/*.jar
Si ces plugins sont oubliés, des erreurs seront affichées dans la trace d'exécution, comme celle-ci lors de l'affichage d'une règle.
2015.08.23 16:36:27 ERROR o.s.s.ui.JRubyFacade Fail to render: http://www.dev.jouvinio.net/sonar/rules_configuration/index/8 org.sonar.server.rules.RulesConsole has unsatisfied dependency 'class [Lorg.sonar.api.rules.RuleRepository;' for constructor 'public org.sonar.server.rules.RulesConsole(org.sonar.api.rules.RuleRepository[])' from org.picocontainer.DefaultPicoContainer@546a1e3b:136<[Immutable]:org.picocontainer.DefaultPicoContainer@6d71a267:6<[Immutable]:org.picocontainer.DefaultPicoContainer@61c945b4:40<| org.picocontainer.injectors.ConstructorInjector.getGreediestSatisfiableConstructor(ConstructorInjector.java:197) org.picocontainer.injectors.ConstructorInjector.getGreediestSatisfiableConstructor(ConstructorInjector.java:112) org.picocontainer.injectors.ConstructorInjector.access$100(ConstructorInjector.java:52) org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:337) org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:272) org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:370) org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.getComponentInstance(AbstractInjectionFactory.java:56) org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64) org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91) org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:692) org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:646) org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:671) org.sonar.api.platform.ComponentContainer.getComponentByType(ComponentContainer.java:115) org.sonar.server.ui.JRubyFacade.get(JRubyFacade.java:99) org.sonar.server.ui.JRubyFacade.getRuleRepositoriesByLanguage(JRubyFacade.java:270)
Mise à jour de la base
Puis il est nécessaire de faire la mise à jour depuis l'URL http://SERVER/sonar/setup.
Problèmes post installation
ATTENTION une alerte sécurité a été levée sur cette version. Les droits d'accès sur les projets peuvent être supprimés après une analyse. Il est donc préférable d'installer la version 3.4.1.
Voir Aussi
Upgrade Notes: https://docs.sonarqube.org/display/SONARQUBE53/Release+3.4+Upgrade+Notes