Cómo trabajar con SonarQube en el entorno local
- 1 Introducción
- 2 Instalar el plug-in de SonarQube para Eclipse
- 3 Enlazar el plug-in con el servidor de SonarQube
- 4 Asociar los módulos del proyecto a la conexión con SonarQube
- 5 Ver los issues de SonarQube en el código
- 6 Desactivar la ejecución automática del plug-in de SonarQube
- 7 Desactivar el chequeo de una regla de SonarQube en el código
- 8 Solucionar problemas de certificado de servidor de SonarQube
- 9 Obtener un informe con las issues del proyecto
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…
En la caja de texto de la pestaña «Search», se introduce el nombre del plug-in («SonarQube for IDE»), se instala y se reinicia el IDE.
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».
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/.
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 token («Generate 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.
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:
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.
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.
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».
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.
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.csvDonde «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.