Sonar Qube (Ex Apache Sonar)

El análisis de código es fundamental para control de calidad en los desarrollos y para ello un producto muy bueno es el Sonar Qube (conocido antiguamente como Apache Sonar ).

Lo he utilizado para proyectos Java con maven,  pero veo que hay un plugin llamado Sonar Qube Runner que te permite hacer el análisis sin necesidad de maven. Puedes utilizar esta herramienta para otros lenguajes de programación.

Instalación

Descargar Sonar Qube y Sonar Qube Runner, descomprimes ambos en una carpeta: Agregas la variable de entorno SONARQUBE_RUNNER_HOME y como valor escribes la ruta donde tienes la carpeta del Sonar Runner. Configurar Sonar Runner, editas el archivo SONARQUBE_RUNNER_HOME/conf/sonar-runner.properties agregas las siguientes líneas:

#Configure here general information about the environment, such as SonarQube DB details for example
#No information about specific project should appear here

#----- Default SonarQube server
sonar.host.url=http://localhost:9000

#----- Apache H2
sonar.jdbc.url=jdbc:h2:tcp://localhost:9092/sonar

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

#----- Default source code encoding
sonar.sourceEncoding=UTF-8

Nota: Debes colocar los mismos datos  que tienes en tu archivo SONAR_SERVER_HOME/conf/sonar.properties, si utilzas otra base como Oracle o MySQL deben conicidir los datos de conexión. Inicias el servidor, entras desde consola a tu SONAR_SERVER_HOME/bin/ y dependiendo de tu equipo ingresas a la carpeta, la mía es windows-x86-32 y ejecutas el script “StartSonar.bat” Para Linux y OSX el script es

sonar.sh start

Ahora si entras http://localhost:9000/ debes ver la página web: Ahora vamos a validar la instalación del Sonar Qube Runner, abres una terminal y ejecutas :

sonar-runner -h

y verás la siguiente salida:

INFO:
INFO: usage: sonar-runner [options]
INFO:
INFO: Options:
INFO:  -D,--define <arg>     Define property
INFO:  -e,--errors           Produce execution error messages
INFO:  -h,--help             Display help information
INFO:  -v,--version          Display version information
INFO:  -X,--debug            Produce execution debug output

Ya tenemos todo listo.

Analizar el código de un proyecto

Para proyectos Java podemos realizarlo de dos formas:

Proyectos Java (sin Maven)

Creas un archivo llamado sonar-project.properties en la carpeta de tu proyecto con el siguiente contenido:

#Required project data fron sonar
sonar.projectKey=my:project
sonar.projectName=My project
sonar.projectVersion=1.0

#Source code directories names
sonar.sources=src,src1

#Test code directories names (optional)
sonar.tests=testDir1,testDir2

#Binaries dir(optional)
binaries=binDir

#Lib Dir (Opcional) ej: path/library.jar,path/to/classes/dir
sonar.libraries=src/lib

# Project Language ( by default is Java)
sonar.language=java

# if you need additional parameters
my.property=value

Los datos son dummy pero debes colocar los de tu proyecto.

Si tus proyectos utilizan diferentes servidores de sonar puedes escribir los datos de conexión en este archivo y colocarlo uno  por cada proyecto, la desventaja es que  vas a tener que configurar tus proyectos uno a uno.

Después ingresas a la carpeta de tu proyecto desde la consola y ejecutas el comando:

sonar-runner

Se paciente el análisis puede tomar su tiempo, al terminar entras en el dashboard de sonar verás el resultado:

Proyecto Java (con Maven)

Ejecutas el siguiente comando en la carpeta de tu proyecto desde consola:

mvn sonar:sonar

Puede tardar un poco de tiempo, al final verás el resultado en el dashboard:

Maven toma la configuración para conectar con sonar del archivo settings.xml ubicado en ${user.home}/.m2, esto es como estrategia de control ya que si no tienes este archivo debes colocar todas estas propiedades dentro del pom.xml de tu proyectp, yo recomiendo mejor centralizar esté control en desde la carpeta del m2, así puedes cambiar facilmente la configuración para todos tus proyectos. Este es un ejemplo:

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                          http://maven.apache.org/xsd/settings-1.0.0.xsd">
<profiles>
    <profile>
       <id>sonar</id>
       <activation>
          <activeByDefault>true</activeByDefault>
       </activation>
       <properties>
          <sonar.jdbc.url>jdbc:mysql://localhost:3306/sonar_qube</sonar.jdbc.url>
          <sonar.jdbc.driverClassName>com.mysql.jdbc.Driver</sonar.jdbc.driverClassName>
          <sonar.jdbc.username>SonarAdmin</sonar.jdbc.username>
          <sonar.jdbc.password>SonarPass</sonar.jdbc.password>
          <!-- SERVER ON A REMOTE HOST -->
          <sonar.host.url>http://localhost:9000</sonar.host.url>
       </properties>
    </profile>
</profiles>
</settings>

Saludos!

Referencias

8 comentarios en “Sonar Qube (Ex Apache Sonar)

  1. Jorge Wust dijo:

    Alguna vez has intentado crear una regla que valide algo que no tenga configurado por defecto. He creado una validación con PMD y al insertar el codigo en una nueva regla me sale error. Luego, vi que tenía que crear un xml pero no se donde poner el archivo generado y que mas configurar.

    • jaehoo dijo:

      Hola, no hasta ahora no he tenido que crear una regla adicional, pero asi como dices se que se puede incluir un xml con el regex de lo que quieres validar a nivel sintactico, pero a si los que buscas es crear una validación funcional creo que deberia realizase un test de integración o algo parecido.

      Saludos

  2. FrankCC dijo:

    hola realice todos los pasos pero me sale el siguiente error: Caused by: You must define the following mandatory properties for ‘Unknown’: sonar.projectKey, sonar.projectName, sonar.projectVersion, sonar.sources

    • jaehoo dijo:

      hola, en realidad no hay gran diferencia.

      Solo instalas el sonar en una sola maquina y las otras el cliente para hacer el analisis. Por los archivos no te sabría decir cuales exactamente.

      yo he trabajado con un plugin de maven, solo debo configurar un archivo en el home de cada maquina, donde escribo la url, el user y el password del sonar. Con eso de forma automática al generar un build se ejecuta el code inspection en cada máquina.

      Saludos

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s