SonarQube: instalación y configuración

Hace poco que he empezado a usar SonarQube y la verdad es que me están gustando mucho las posibilidades que ofrece. En este post voy a hablar acerca de esta herramienta y voy a comentar paso a paso el proceso de instalación y configuración del mismo. El proceso de análisis lo dejaré para otro post para no hacer demasiado largo este.

SonarQube es una plataforma para evaluar código fuente. Es software libre y usa diversas herramientas de análisis estático de código fuente como Checkstyle, PMD o FindBugs para obtener métricas que pueden ayudar a mejorar la calidad del código de nuestros programas. Además, tiene soporte para más de 20 lenguajes de programación entre los que se encuentran Java, C#, C / C++, PL / SQL, Cobol, ABAP, Python, JavaScript…

arquitectura_sonar

SonarQube cubre 7 ejes principales de la calidad del software y una vez analizado un proyecto nos muestra información detallada sobre la arquitectura y el diseño, comentarios de nuestro programa, código duplicado, reglas de programación acordes con el lenguaje que estemos utilizando, bugs potenciales y su posible solución, datos referentes a la complejidad del proyecto e incluso datos sobre pruebas unitarias (si tenemos alguna), como número de pruebas unitarias pasadas correctamente o porcentaje de cubrimiento de las mismas.

7axes

SonarQube está pensado para ofrecer un seguimiento a lo largo del desarrollo y/o mantenimiento de un programa informático y apoyar a la mejora continua. Sin embargo, también puede ser utilizado para realizar análisis aislados y obtener informes acerca de nuestros proyectos.

Pasos previos

Antes de comenzar con la instalación y configuración de SonarQube hay que instalar una base de datos. SonarQube viene por defecto configurado para utilizar H2, que es una base de datos embebida y que solo está recomendada para pruebas. SonarQube es compatible con varios sistemas gestores de bases de datos como MySQL 5.x, Oracle 10g/ 11g, PostgreSQL 8.x/ 9.x y Microsoft SQLServer. En nuestro caso realizaremos la instalación utilizando MySQL 5.6, que previamente deberá estar instalado en el sistema.

Lo primero que hay que hacer es crear un nuevo esquema y un usuario con permisos para crear, actualizar y eliminar objetos de este esquema. En mi caso tanto el esquema como el usuario se van a llamar sonarqube.

El script SQL para crear el esquema y el usuario es el siguiente:

CREATE DATABASE sonarqube CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER 'sonarqube' IDENTIFIED BY 'sonarqube';
GRANT ALL ON sonarqube.* TO 'sonarqube'@'%' IDENTIFIED BY 'sonarqube';
GRANT ALL ON sonarqube.* TO 'sonarqube'@'localhost' IDENTIFIED BY 'sonarqube';
FLUSH PRIVILEGES;

Un vez tengamos creado el esquema y el usuario podemos comenzar con la instalación de SonarQube.

Instalación del Servidor Web de SonarQube

  1. Vamos a la página oficial de descarga SonarQube y descargamos la última versión del servidor (SonarQube v4.0).
  2. Descomprimimos el archivo .zip en C:\ para tenerlo fácilmente accesible.
  3. Editamos el archivo sonar.properties para configurar el acceso a la base de datos. El archivo se encuentra en C:\sonarqube-4.0\conf\sonar.properties. Dentro del archivo de configuración hay que comentar la siguiente línea para no utilizar el SGBD de H2.
    #sonar.embeddedDatabase.port=9092

    Descomentamos las siguientes líneas y asignamos los siguientes valores para indicar al servidor web de SonarQube qué base de datos vamos a utilizar, los datos del usuario y contraseña de la base de datos y la información del servidor web donde se ejecutará una vez esté instalado. Por defecto se ejecuta sobre localhost con el puerto 9000.

    # DATABASE
    sonar.jdbc.username=sonarqube
    sonar.jdbc.password=sonarqube
    
    #----- MySQL 5.x
    sonar.jdbc.url=jdbc:mysql://localhost:3306/sonarqube?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true
    
    # WEB SERVER
    sonar.web.host=localhost
    sonar.web.port=9000
    
  4. El último paso consiste en ejecutar el servidor de SonarQube. En mi caso voy a ejecutar la versión de 32 bits de Windows y la ruta es la siguiente: C:\sonarqube-4.0\bin\windows-x86-32\StartSonar.bat.

La primera vez que arrancamos el servidor de SonarQube puede tardar un par de minutos porque tiene que crear las tablas en la base de datos. Si todo ha ido bien se debería mostrar un mensaje indicando que el servidor está arrancado:

Server started

Ahora vamos a comprobar en nuestro navegador que SonarQube se encuentra disponible, para ello vamos a http://localhost:9000/ y se deberá mostrar la página de inicio del servidor de SonarQube:

localhost9000

Esto significa que ya tenemos nuestro servidor de SonarQube listo para funcionar.

Instalación del plugin para el lenguaje de programación

Antes de poder analizar el código de nuestros proyectos con Sonar-Runer (cliente oficial de SonarQube) es necesario instalar en el servidor el plugin para el lenguaje que queramos analizar.

Accedemos al servidor desde http://localhost:9000/ y nos logeamos como administrador (admin/admin).

Vamos a Settings > Update Center y veremos que por defecto ya viene instalado el plugin para Java. Se pueden instalar plugins para diversos lenguajes o incluso actualizarlos a una versión más reciente. Para ello solo tenemos que hacer click en Available Plugins y seleccionar el que queramos.

plugin servidor

Instalación y configuración de Sonar-Runner

Una vez tengamos listo el servidor con los plugins necesarios es hora instalar un cliente para poder analizar el código. Para este tutorial voy a utilizar Sonar-Runner que es el cliente oficial de SonarQube.

  1. Vamos a la página oficial de descarga SonarQube y descargamos la última versión del cliente (Sonar-Runner v2.3).
  2. Descomprimimos el archivo .zip en C:\ para tenerlo fácilmente accesible.
  3. Para configurar Sonar-Runner tenemos que ir a C:\sonar-runner-2.3\conf y editar el archivo sonar-runner.properties. Tenemos que descomentar las siguientes líneas y completarlas con los datos de la configuración del servidor que hemos empleado en la instalación del mismo:
#----- Default SonarQube server
sonar.host.url=http://localhost:9000

#----- MySQL
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonarqube?useUnicode=true&characterEncoding=utf8

#----- Global database settings
sonar.jdbc.username=sonarqube
sonar.jdbc.password=sonarqube

Añadimos una nueva variable del sistema llamada SONAR_RUNNER_HOME con el directorio de instalación:

SONAR_RUNNER_HOME

Añadimos la ruta completa al path de Windows:

SONAR_RUNNER path

Para comprobar si se ha añadido correctamente al path de Windows abrimos un terminal y ejecutamos el comando sonar-runner –h. Si todo es correcto deberíamos obtener la ayuda de Sonar-Runner:

sonar-runner-h

Ya tenemos instalado y configurado tanto el servidor como el cliente de SonarQube y podemos empezar a analizar nuestros proyectos.

El proceso de análisis de un proyecto lo podeís encontrar en el siguiente post.

Más información en la web de SonarQube y en la documentación

10 comentarios en “SonarQube: instalación y configuración”

  1. Hola
    buen post me sale que el servidor esta iniciado todo bien pero cuando entro al localhost:9000
    sale:

    org.jruby.rack.RackInitializationException: no connection available
    from arjdbc/jdbc/RubyJdbcConnection.java:517:in `set_native_database_types’
    from C:/sonarqube-4.0/web/WEB-INF/gems/gems/activerecord-jdbc-adapter-1.1.3/lib/arjdbc/jdbc/connection.rb:61:in `initialize’
    from C:/sonarqube-4.0/web/WEB-INF/gems/gems/activerecord-jdbc-adapter-1.1.3/lib/arjdbc/jdbc/adapter.rb:31:in `initialize’
    from C:/sonarqube-4.0/web/WEB-INF/gems/gems/activerecord-jdbc-adapter-1.1.3/lib/arjdbc/jdbc/connection_methods.rb:6:in `jdbc_connection’
    from org/jruby/RubyKernel.java:2225:in `send’
    from C:/sonarqube-4.0/web/WEB-INF/gems/gems/activerecord-2.3.15/lib/active_record/connection_adapters/abstract/connection_pool.rb:223:in `new_connection’
    from C:/sonarqube-4.0/web/WEB-INF/gems/gems/activerecord-2.3.15/lib/active_record/connection_adapters/abstract/connection_pool.rb:245:in `checkout_new_connection’
    from C:/sonarqube-4.0/web/WEB-INF/gems/gems/activerecord-2.3.15/lib/active_record/connection_adapters/abstract/connection_pool.rb:188:in `checkout’
    from org/jruby/RubyKernel.java:1517:in `loop’
    from C:/sonarqube-4.0/web/WEB-INF/gems/gems/activerecord-2.3.15/lib/active_record/connection_adapters/abstract/connection_pool.rb:184:in `checkout’
    from jar:file:/C:/sonarqube-4.0/web/WEB-INF/lib/jruby-complete-1.7.6.jar!/META-INF/jruby.home/lib/ruby/1.8/monitor.rb:191:in `mon_synchronize’
    from C:/sonarqube-4.0/web/WEB-INF/gems/gems/activerecord-2.3.15/lib/active_record/connection_adapters/abstract/connection_pool.rb:183:in `checkout’
    from C:/sonarqube-4.0/web/WEB-INF/gems/gems/activerecord-2.3.15/lib/active_record/connection_adapters/abstract/connection_pool.rb:98:in `connection’
    from C:/sonarqube-4.0/web/WEB-INF/gems/gems/activerecord-2.3.15/lib/active_record/connection_adapters/abstract/connection_pool.rb:326:in `retrieve_connection’
    from C:/sonarqube-4.0/web/WEB-INF/gems/gems/activerecord-2.3.15/lib/active_record/connection_adapters/abstract/connection_specification.rb:123:in `retrieve_connection’
    from C:/sonarqube-4.0/web/WEB-INF/gems/gems/activerecord-2.3.15/lib/active_record/connection_adapters/abstract/connection_specification.rb:115:in `connection’
    from C:/sonarqube-4.0/web/WEB-INF/gems/gems/activerecord-2.3.15/lib/active_record/migration.rb:440:in `initialize’
    from C:/sonarqube-4.0/web/WEB-INF/gems/gems/activerecord-2.3.15/lib/active_record/migration.rb:401:in `up’
    from C:/sonarqube-4.0/web/WEB-INF/gems/gems/activerecord-2.3.15/lib/active_record/migration.rb:383:in `migrate’
    from C:/sonarqube-4.0/web/WEB-INF/config/../lib/database_version.rb:62:in `upgrade_and_start’
    from C:/sonarqube-4.0/web/WEB-INF/config/../lib/database_version.rb:74:in `automatic_setup’
    from C:/sonarqube-4.0/web/WEB-INF/config/environment.rb:236:in `(root)’
    from org/jruby/RubyKernel.java:1096:in `load’
    from file:/C:/sonarqube-4.0/web/WEB-INF/lib/jruby-rack-1.1.13.2.jar!/jruby/rack/rails/environment2.rb:1:in `(root)’
    from file:/C:/sonarqube-4.0/web/WEB-INF/lib/jruby-rack-1.1.13.2.jar!/jruby/rack/rails/environment2.rb:25:in `load_environment’
    from file:/C:/sonarqube-4.0/web/WEB-INF/lib/jruby-rack-1.1.13.2.jar!/jruby/rack/rails_booter.rb:79:in `load_environment’

    quisiera saber como soluciono esto

    1. Hola buenas tardes.

      A mi también me salia ese error, tienes que verificar que el archivo sonar.properties este configurado correctamente según la base de datos a la cual te vas a conectar.
      Yo utilice una base de datos Oracle 11g Express Edition y cuado coloque la siguiente linea
      sonar.jdbc.url: jdbc:oracle:thin:@localhost:1521/XE

      en el archivo sonar.properties me funciono, ya no salio el error.

      Cordialmente.

      Luis.

  2. Hola, buenas tardes…
    Luego que realizo todos los pasos para la instalacion de sonarqube y ejecuto C:\sonarqube-4.0\bin\windows-x86-32\StartSonar.bat. arraca y luego se cierra sin mostrar nada. Ingreso al http://localhost:9000/ y no carga.

    Me podrian ayudar!
    Gracias de antemano.

  3. Para los que les sale el error:

    org.jruby.rack.RackInitializationException: no connection available
    from arjdbc/jdbc/RubyJdbcConnection.java:517:in `set_native_database_types’
    from C:/sonarqube-4.0/web/WEB-INF/gems/gems/activerecord- ETC….

    Yo lo solucione asi:
    sonar.jdbc.url=jdbc:mysql://localhost:3306/sonarqube?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true

    Hay que configurar bien sonar.properties

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *