Sonar Update 3.4

De EjnTricks
Révision de 5 avril 2018 à 10:02 par Etienne (discussion | contributions)

(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)

Hand-icon.png Votre avis

Nobody voted on this yet

 You need to enable JavaScript to vote

Bug-icon.png 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);


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

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


Update icon.png Plugin-icon.png 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)


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

Puis il est nécessaire de faire la mise à jour depuis l'URL http://SERVER/sonar/setup.


Bug-icon.png 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.


Viewer icon.png Voir Aussi

Upgrade Notes: https://docs.sonarqube.org/display/SONARQUBE53/Release+3.4+Upgrade+Notes