Temario‎ > ‎Continuous Inspection‎ > ‎

Continuous Inspection en Java

En el mundo java existen varias herramientas para medir diferentes (y algunas los mismos) aspectos del código, como la cobertura, métricas, reglas de código de análisis estático, etc.

Ejemplos: 
Sonar es una herramienta que no viene a "competir" con las anteriores, sino justamente a "unificarlas". Es un producto que permite centralizar el análisis de los proyectos usando todas esas herramientas.
Así, permite persistir los resultados de esos análisis en el tiempo. Entonces luego permite ver la evolución de un proyecto, por ejemplo si los problemas de código aumentaron o disminuyeron, y con qué frecuencia. etc.
También permite visualizar los resultados de todas las herramientas en un sólo lugar.

Consta de 3 partes:
  • Una base de datos: donde los resultados de lo análisis se persisten
  • Una webapp: actua de frontend y permite visualizar toda la información
  • Un comando: que genera las métricas, se conecta a la db y guarda los resultados.

En general ese último componente, el comando, se suele ejecutar a través de Maven. Si uno trabaja en un proyecto Java, generalmente utiliza Maven para el manejo de dependencias y el build.
Con lo cual existe un plugin para ejecutar sonar.

Integración con Maven

Existe un plugin de maven que permite ejecutar sonar como un goal. Éste goal va a ejecutar todas las métricas sobre el proyecto local y subir los resultados a la base de datos de sonar.

Para eso hay que configurar los datos de conexión a la BD de sonar. Y obviamente el servidor tiene que proveer acceso remoto (puertos abiertos, base de datos que acepte conexiones remotas, etc).

Esto se hace con un profile en el settings

<profile>
  <id>sonar</id>
  <activation>
    <activeByDefault>true</activeByDefault>
  </activation>
  <properties>
     <sonar.jdbc.url>
       jdbc:postgresql://172.32.0.17/sonar
     </sonar.jdbc.url>
 <sonar.jdbc.username>sonar</sonar.jdbc.username>
 <sonar.jdbc.password>sonar</sonar.jdbc.password>
 <sonar.host.url>
    http://200.5.224.124:81/sonar/
 </sonar.host.url>
   </properties>
</profile>

Luego podemos ejecutar

mvn sonar:sonar

Continuous Inspection con Sonar

Vimos que uno puede ejecutar un goal de maven para analizar el proyecto desde su propia máquina.
En general la idea es hacer este análisis en forma periódica y automática.
Además, porque suele demorar un rato.
Entonces conviene que lo haga la herramienta de C.I.

Acá un diagrama de ejemplo utilizando Jenkins (podría ser cualquier CI)

Los resultados van a parar a la base de datos de Sonar.

Luego la webapp de sonar muestra esa info.


Tutorial Sonar con Docker

Tal como vimos con Jenkins, una forma simple de hacer andar sonar es usando una imagen de Docker.
Para eso usamos ésta imagen:


docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 sonarqube:5.1

Luego accedemos a

http://localhost:9000

Vamos a ver algo así:


Luego puede ejecutar sobre un proyecto maven

mvn sonar:sonar

Deberían ver algunas lineas como estas:

[INFO] [22:46:51.354] -------------  Scan wollok-parent

[INFO] [22:46:51.355] Load module settings

[INFO] [22:46:51.372] Base dir: /Users/jfernandes/dev/data/repo/wollok-dev/org.uqbar.project.wollok.releng

[INFO] [22:46:51.372] Working dir: /Users/jfernandes/dev/data/repo/wollok-dev/org.uqbar.project.wollok.releng/target/sonar

[INFO] [22:46:51.372] Source encoding: UTF-8, default locale: en_US

[INFO] [22:46:51.396] Sensor Lines Sensor

[INFO] [22:46:51.396] Sensor Lines Sensor (done) | time=0ms

[INFO] [22:46:51.396] Sensor InitialOpenIssuesSensor

[INFO] [22:46:51.439] Sensor InitialOpenIssuesSensor (done) | time=43ms

[INFO] [22:46:51.439] Sensor ProjectLinksSensor

[INFO] [22:46:51.448] Sensor ProjectLinksSensor (done) | time=9ms

[INFO] [22:46:51.448] Sensor VersionEventsSensor

[INFO] [22:46:51.479] Sensor VersionEventsSensor (done) | time=31ms

[INFO] [22:46:51.479] Sensor Maven dependencies

[INFO] [22:46:51.479] Sensor Maven dependencies (done) | time=0ms

[INFO] [22:46:51.479] Sensor SCM Sensor


Y finalmente:

[INFO] [22:47:16.408] ANALYSIS SUCCESSFUL, you can browse http://192.168.59.103:9000/dashboard/index/org.uqbar-project:wollok-parent

[INFO] [22:47:16.408] Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report.


Proyecto de Ejemplo

Acá podemos ver la página de Sonar en Nemo (Sonar público) para el proyecto de Apache Digester

http://nemo.sonarqube.org/dashboard/index/392151

Comments