Cómo trabajar con SonarQube en el entorno local

Cómo trabajar con SonarQube en el entorno local

Introducción

SonarQube es una plataforma que analiza el código y detecta errores como vulnerabilidades, fragmentos de código mal estructurados, y falta de cobertura en las pruebas, proporcionando recomendaciones para su corrección.

En este documento se muestra cómo instalar y ejecutar un plug-in de Eclipse para trabajar con ella.

Instalar el plug-in de SonarQube para Eclipse

Para trabajar con SonarQube es conveniente instalar un plug-in en Eclipse. Este plug-in permite advertir qué problemas presenta el código a ojos de SonarQube, ofreciendo la posibilidad de resolverlos tanto a posteriori como en el mismo momento en que estos se produzcan.

El plug-in que se va a instalar, anteriormente denominado como «SonarLint», es el de «SonarQube for IDE», en concreto su versión 11.5.1.

Para instalarlo, desde Eclipse, se accede a la opción del menú superior de Help -> Eclipse Marketplace

image-20250507-095423.png

En la caja de texto de la pestaña «Search», se introduce el nombre del plug-inSonarQube for IDE»), se instala y se reinicia el IDE.

image-20250507-095516.png

Si por algún motivo (a veces, sucede) el Marketplace de Eclipse no carga convenientemente, se puede descargar el plug-in desde la opción de menú Help -> Install New Software…

Se añade la URL de https://eclipse-uc.sonarlint.org, se selecciona «SonarQube for IDE», se instala y se reinicia el IDE.

Enlazar el plug-in con el servidor de SonarQube

Para que el plug-in instalado sepa a qué reglas debe atenerse, es preciso conectarlo con un servidor de SonarQube.

Para ello, se accede a la opción del menú superior de Window -> Show View -> Other, se pulsa en la carpeta «SonarQube» y se selecciona la vista «SonarQube Bindings».

image-20250507-095714.png

En la pestaña que se mostrará, se hace clic con el botón derecho del ratón y se pulsa en «New connection…». A continuación, se selecciona la opción «SonarQube server» y se pulsa «Next >».

Aparecerá entonces una caja de texto donde se indicará la URL donde se halla instalado el servidor de Sonar. En el caso de Onesait Platform, dicho servidor es: https://sonarqube.onesaitplatform.com/.

image-20250507-095849.png

Tras pulsar «Next >», se solicitará un token. Este token oficia de identificador para que el servidor de SonarQube sepa que el acceso desde Eclipse está autorizado.

Se puede entonces crear un nuevo tokenGenerate token») o se puede utilizar uno ya existente.

Tras optar por una u otra opción, se pulsa el botón «Finish». Tras hacerlo, la conexión debe aparecer en la vista.

Asociar los módulos del proyecto a la conexión con SonarQube

Para asociar los módulos del proyecto a la conexión con SonarQube recién creada, se hace clic con el botón derecho del ratón sobre la conexión y se selecciona «Bind Projects…». Se pulsa el botón «Add…» y se añaden los módulos del proyecto.

image-20250507-095946.png

Una vez hecho esto, ya deberían verse los issues de SonarQube en el código. Si no es así, bastará con reiniciar Eclipse.

Ver los issues de SonarQube en el código

Los issues de SonarQube se destacan sobre el código a modo de subrayado azul:

image-20250507-100026.png

Para obtener un listado con todas las issues que hay en el fichero que se encuentre abierto, se accede a la pestaña con la vista «SonarQube On-The-Fly»: Window -> Show View -> Other… -> SonarQube -> SonarQube On-The-Fly.

image-20250507-100043.png

Desactivar la ejecución automática del plug-in de SonarQube

Si se desea evitar la demora en el IDE que introduce el plug-in de SonarQube, se puede desactivar este temporal o definitivamente.

Para ello, se pulsa con el botón derecho del ratón sobre el proyecto actual y se selecciona «Propiedades -> SonarQube -> deshabilitar "Run SonarQube automatically"».

Si más tarde se quiere ejecutar el análisis de SonarQube, se pulsa con el botón derecho del ratón sobre el proyecto actual y se selecciona «SonarQube -> Analyze».

Desactivar el chequeo de una regla de SonarQube en el código

Si se desea que una regla de SonarQube no se aplique en una determinada línea de código, se le añadirá al final de la línea: «// NOSONAR», deseablemente acompañado de alguna justificación: «// NOSONAR: It's not a @RestController».

Solucionar problemas de certificado de servidor de SonarQube

Es posible que se produzca un error de certificado cuando el plug-in de SonarQube trata de acceder al servidor.

image-20250530-100853.png

Cuando sucede esto, es necesario importar los certificados del servidor de SonarQube en la keystore de la JVM de Eclipse.

Para ello, lo primero es descargar los dos certificados de servidor necesarios.

Esto puede hacerse yendo a la página del servidor de SonarQube (https://sonarqube.onesaitplatform.com/), haciendo clic en el candado de direcciones, y dirigiéndose a «Connection is secure -> Certificate is valid -> Details».

Posteriormente, se procede a exportar los dos certificados necesarios. Para cada uno, se selecciona el certificado y se pulsa el botón «Export…», eligiendo el formato «Base-64 encoded ASCII, single certificate (*.pem, *.crt)» y dándole al fichero un nombre y una extensión «.crt».

image-20250530-102351.png

Una vez disponemos de los dos ficheros, es preciso localizar dónde se encuentra la JVM de Eclipse. Lo comprobamos mirando el valor «Help -> About Eclipse -> Installation Details -> Configuration -> java.home».

El siguiente paso es abrir el intérprete de comandos y dirigirnos a dicha ruta. Seguidamente, se accede al subdirectorio «jre\lib\security».

La ruta final será algo así como S:\tools\eclipse\plugins\org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_17.0.5.v20221102-0933\jre\lib\security.

Hecho esto, se procede a copiar en dicha ubicación los dos ficheros de los certificados y se importan uno después de otro en el keystore:

keytool -importcert -trustcacerts -alias sonar -file <nombre_certificado_n.crt> -keystore cacerts -storepass changeit

Por último, se reinicia Eclipse y, si fuera necesario, se desasocian y asocian de nuevo los proyectos al servidor de SonarQube.

Obtener un informe con las issues del proyecto

La versión Community de SonarQube no permite obtener un informe como tal de las issues existentes en un proyecto. Estas pueden verse, pero la ortopédica fluidez de su interfaz dificulta la inspección de las mismas.

image-20250507-100110.png

Se puede, no obstante, obtener un listado haciendo llamadas a la API de SonarQube ejecutando un fichero «.bat» desde el símbolo del sistema:

@echo off SET "SONAR_TOKEN=<token>" SET "SEVERITIES=BLOCKER,CRITICAL,MAJOR,MINOR,INFO" SET "TYPES=BUG,VULNERABILITY,CODE_SMELL" SET "STATUSES=OPEN,CONFIRMED,REOPENED" FOR /F "delims=" %%T IN ('curl --ssl-no-revoke -u %SONAR_TOKEN%: "https://sonarqube.onesaitplatform.com/api/issues/search?projectKeys=onesait-platform&componentKeys=onesait-platform&severities=%SEVERITIES%&types=%TYPES%&statuses=%STATUSES%&ps=1" ^| jq -r .total') DO SET "TOTAL=%%T" IF NOT DEFINED TOTAL ( echo Error: Failed to set TOTAL. Check network, API, or jq installation. exit /b 1 ) SET /A PAGES=(%TOTAL% + 499) / 500 IF %PAGES% LEQ 0 SET PAGES=1 echo Total issues: %TOTAL% echo Number of pages: %PAGES% echo "key","rule","message","severity","type","component","line" > issues.csv FOR /L %%p IN (1,1,%PAGES%) DO ( echo Querying page %%p... curl --ssl-no-revoke -u %SONAR_TOKEN%: "https://sonarqube.onesaitplatform.com/api/issues/search?projectKeys=onesait-platform&componentKeys=onesait-platform&severities=%SEVERITIES%&types=%TYPES%&statuses=%STATUSES%&ps=500&p=%%p" | jq -r ".issues[] | [.key, .rule, .message, .severity, .type, .component, (.line // \"\")] | @csv" >> issues.csv || ( echo Error on page %%p exit /b 1 ) ) echo Completed. Check issues.csv

Donde «jq» es una herramienta de línea de comandos para procesar y manipular JSON que se puede descargar desde la web oficial:

Y donde se indican los parámetros:

  • severities=BLOCKER,CRITICAL,MAJOR: filtra los issues escogiendo solo los que tienen serveridad BLOCKER, CRITICAL y MAJOR.

  • types=BUG,VULNERABILITY: filtra los issues de tipo BUG y VULNERABILITY.

  • statuses=OPEN,CONFIRMED,REOPENED: filtra los issues con estado OPEN, CONFIRMED y REOPENED.

  • ps=500: define el tamaño de la página (el máximo número de resultados por página es 500).

  • p=%%p: especifica la página de los resultados.

Ejecutados los comandos, se obtiene una serie de ficheros «.csv» que se pueden importar en Excel.

image-20250507-100239.png