Dentro la mejora de calidad que podemos acometer para nuestros proyectos, podemos identificar en la mejora de la seguridad el refactor de código para hacerlo más sostenible, adaptar flujos DevOps en nuestro desarrollo, apoyarnos en herramientas que nos ayuden a realizar todas estas tareas de forma sencilla… Hoy, hemos venido a hablar sobre algo que hace todas estas cosas, ¿no es increíble?
Como ya sabrás, si no lo has adivinado todavía (viendo el título del artículo seguro que ya lo habías hecho), estamos hablando de SonarQube.
¿Qué es SonarQube?
SonarQube es una plataforma de código abierto para el análisis de la calidad de código usando reglas, ya sean predefinidas o custom. Actualmente tiene 2 versiones, una versión OnPremise (la de toda la vida) y una versión Cloud.
SonarQube es esencial para mantener la calidad de nuestros desarrollos, por la indecente cantidad de reglas de análisis estático de código que tiene, por la facilidad de incorporar esos análisis en un Pipeline de Azure Devops y estar siempre al tanto de la calidad de nuestro software.
Una de las ventajas que tiene SonarQube es que, al ser código abierto, tiene gran cantidad de plugins desarrollados por la comunidad. En esta web tienes un buscador de todos los plugins disponibles para SonarQube.
Pero, como estamos seguros de que te quieres poner manos a la obra, vamos a explicar paso a paso cómo instalar SonarQube en un servidor OnPremise para poder trastear con el como dios manda.
Primero, en nuestra demo, para hacerlo de la forma más sencilla posible, usaremos una máquina virtual de Azure para la instalación.
Para la instalación, usaremos una template de Azure, nos dirijiremos a esta dirección y pulsaremos en “Deploy en Azure”.
Se nos abrirá para seleccionar la cuenta de Azure donde vamos a realizar la instalación.
Una vez en nuestra cuenta, introduciremos los datos en la plantilla, para que se empiece a desplegar.
Primero seleccionaremos el grupo de recursos que queramos o crearemos uno nuevo.
En el resto de datos pondremos un ejemplo de valores, pero pueden ser los que mejor se adapten a tus necesidades.
Una vez introduzcamos todos los valores, pulsaremos en “Adquirir” y se realizará una validación para comprobar que todos los nombres y valores son correctos para la implementación.
Cuando esté acabada la implementación, veremos que se han creado los recursos en nuestro grupo de recursos.
Que, resumiendo, sería la máquina virtual con la base de datos necesaria y configurada con nuestro SonarQube.
Una vez terminado este proceso, los creadores de la plantilla nos dicen que entremos en la máquina virtual (con las credenciales que hemos creado) pro RDP, e instalemos Java JDK 8 desde este enlace y reiniciemos el servicio de SonarQube desde “Servicios”.
Una vez que se reinicie el servicio, esperaremos un poco para que se reinicien todos los servicios, antes de entrar en nuestro sonar.
Ahora ya podremos configurar nuestras pipelines de Azure Devops para que ejecuten el informe de nuestro código.
Para ello, primero tendremos que crear un token para analizar un nuevo proyecto, entramos en nuestra página de SonarQube que acabemos de instalar y pulsamos en “Analyze new proyect”.
Generamos un nuevo token y nos lo guardamos para usarlo luego. En el paso 2 le diremos qué lenguaje vamos a analizar; por ejemplo “C#”. Por último, definiremos una key para identificar nuestro proyecto de forma única.
Ahora sí, nos dirijiremos a nuestro proyecto de Azure Devops, que contiene el proyecto que queremos analizar.
Pulsaremos en “Pipelines” y “New Pipeline”.
Seleccionaremos en “Visual Designer” como opción y el repositorio y rama que queremos analizar.
Seleccionaremos la template que más se ajusta a nuestro proyecto, como era un proyecto de C#, seleccionaremos “.Net Desktop” por ejemplo.
Una vez dentro de la creación de la Build, añadiremos un nuevo Step, pulsando en el “+”.
En el buscador buscamos “sonar” y aparecerán las tasks para configurar Sonar.
Si no apareciera como extensión instalada, habría que instalarla desde el Marketplace.
La primera Tarea que seleccionaremos es “Prepare Analysis Configuration”, que habría que poner antes de que haga la compilación nuestra Build.
Dentro de la configuración de la tarea, habría que configurar lo siguiente:
Lo primero, sería crear un service connection, para ello pulsamos en “Manage”:
Desde aquí crearíamos un service connection para nuestro sonar:
Le ponemos un nombre, el server url sería nuestro server que hemos instalado, y el token que hemos generado en nuestro sonar al principio.
Si volvemos a nuestra Build, ahora nos aparecerá en el listado de endpoint, el service connection que hemos creado.
Le pondremos la key que hemos puesto en el sonar, en el proyecto name, el nombre que le hemos dado al proyecto en sonarQube.
Ahora tendríamos que añadir la siguiente Task, añadiremos otro Step, buscando por sonar de nuevo, pero seleccionando “Run Analysis”. En este caso no configuraremos nada, y lo pondremos después de hacer la compilación.
En tercer lugar, añadimos otro step, añadiendo la tercera opción que nos queda en el sonar: “Publish Quality Gate Result”.
Con esto ya tendríamos configurado nuestro SonarQube en nuestra Build.
Una vez que se lance la build, ya podríamos ir a nuestro SonarQube y ver el análisis de código de nuestro proyecto, donde podremos realizar filtros y ver las mejoras que podemos hacer a nuestro código para que cumpla unos mínimos de calidad.
Hasta aquí el post de hoy, donde hemos visto paso a paso cómo crear nuestro servidor de SonarQube y, lo más importante, cómo integrarlo dentro de un Pipeline de Azure Devops, para que cada vez que se haga un commit del código sepamos el estado de nuestro proyecto y podamos tomar medidas de forma rápida si algo no nos cuadra o no se están realizando las cosas como nos gustaría.
Autor: Alberto Picazo Backend y Azure DevOps Technical Lead