9 juin 2015

Sonar - Analyse d'un projet Javascript

Nous allons effectuer l'analyse de code sur Sonar d'un projet Javascript avec l'outil de build Grunt.

Nous utiliseront les images officielles MySQL et Sonar de Docker.

Pour info, voici la documentation de Sonar :

MySQL & Sonar

Lancer les commandes suivantes sur le serveur pour démarrer les conteneurs Docker :

MySQL

docker run --name sonarmysql -e MYSQL_ROOT_PASSWORD=admin -e MYSQL_DATABASE=sonar -e MYSQL_USER=sonar -e MYSQL_PASSWORD=sonar -p 3306:3306 -d mysql:latest

Sonar

docker run --name sonarqube -p 9000:9000 -p 9092:9092 -e SONARQUBE_JDBC_USERNAME=sonar -e SONARQUBE_JDBC_PASSWORD=sonar -e SONARQUBE_JDBC_URL="jdbc:mysql://sonarmysql:3306/sonar?useUnicode=true&characterEncoding=utf8" --link sonarmysql:sonarmysql -d sonarqube:latest

Interface Web de Sonar

URL :
  • http://[URL du serveur Docker]:9000
    • avec [URL du serveur Docker] : URL ou Adresse IP de la machine sur laquelle les commandes docker ont été lancées

Installer le plugin Javascript pour Sonar


  • Aller sur l'interface Web de Sonar
    • http://[URL du serveur]:9000
  • Se connecter en adminstrateur
    • login / mdp : admin / admin
  • Menu : Settings > System > Update Center > Available Plugins
  • Sélectionner les plugins à ajouter :
    • Javascript
    • CSS
  • Redémarrer Sonar :
    • Dans le terminal de commandes :
      • docker ps
        • copier l'identifiant associé au conteneur sonarqube
      • docker stop [identifiant]
        • le conteneur sonarqube s'arrête
      • docker start [identifiant]
        • le conteneur sonarqube est redémarré
  • Retourner sur la liste des plugins sur l'interface Web de Sonar
    • Menu : Settings > System > Update Center
  • Le plugin Javascript apparaît dans cette liste

Grunt : grunt-sonar-runner

Installer le plugin

  • Installer le plugin grunt-sonar-runner dans le projet
    • A la racine du projet, exécuter :
    • npm install grunt-sonar-runner --save-dev

Configurer Grunt

  • Modifier le fichier Gruntfile.js:
    • Ajouter la déclaration du plugin au début du fichier Gruntfile.js:
    • module.exports = function(grunt) {
      
          grunt.loadNpmTasks('grunt-sonar-runner');
      ...
      };
      
    • Ajouter la configuration suivante :
    •       sonarRunner: {
              analysis: {
                options: {
                  debug: true,
                  separator: '\n',
                  sonar: {
                    host: {
                      url: 'http://[URL du serveur]:9000'
                    },
      
                    jdbc: {
                      url: 'jdbc:mysql://[URL du serveur]:3306/sonar',
                      username: 'sonar',
                      password: 'sonar'
                    },
      
                    projectKey: 'sonar:grunt-sonar-runner:0.1.0',
                    projectName: '[nom du projet]',
                    projectVersion: '0.10',
                    sources: ['app','test'].join(','),
                    exclusions: ['**/bower_components','**/node_modules].join(','),
                    language: 'js',
                    sourceEncoding: 'UTF-8'
                  }
                }
              }
            }
      
    • , avec :
      • [URL du serveur] : URL du serveur sur lequel ont été lancées les commandes docker ci-dessus
      • [nom du projet] : Nom du projet tel qu'il sera affiché dans Sonar

Lancer l'analyse via Grunt

grunt sonarRunner:analysis

Voir les résultats

  • Aller sur l'interface Web de Sonar
  • Le projet apparaît dans le Dashboard de Sonar

Erreur possible

MySQL : PacketTooBigException

Dans le cas de l'erreur suivante :
Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (5457390 > 4194304).
Pour résoudre cette erreur :
  • Se connecter avec un client SQL au serveur mySQL en tant que root avec le mot de passe admin
  • Exécuter la commande suivante :
  • SET GLOBAL max_allowed_packet = 1024*1024*14;