Guía de instalación y configuración de SonarQube 7.1 con plugin de Open API en un contenedor Docker
Consideraciones de la instalación:
Se elegió la versión de SonarQube 7.1 compatible con Java 8 y plugin de Open API para Sonar. El sistema operativo usado en la publicación es Microsoft Windows.
Prerrequisitos:
- Docker Desktop para Windows. Se puede descargar la última versión disponible en https://docs.docker.com/desktop/windows/install/
- JDK 8 de Java
- Documentación oficial: Documentation — SonarQube-7.1
Pasos de la instalación:
- Verificar si Docker Desktop está instalado e iniciado en el sistema.
- Definir una carpeta para el proyecto donde se usará Docker Compose
- En la ubicación elegida crear el archivo docker-compose.yml
- Editar el archivo docker-compose.yml y agregar el siguiente contenido:
Código fuente disponible: docker-compose.yml
Esta configuración creará un contenedor de Docker basado en la imagen oficial de Sonar 7.1 disponible en DockerHub y otro contenedor Docker con una base de datos Postgres.
- Abrir una consola en la carpeta donde se ubica el archivo docker-compose.yml
- Iniciar Docker Compose mediante el comando:
docker-compose up -d
Comprobar la creación de contenedores en la salida de la consola
Referencia técnica con argumentos alternativos: docker compose up
Referencia de todos los comandos: Overview of docker compose CLI
- Navegar a la consola web del servidor SonarQube accediendo a la dirección http://localhost:9000/
- Autenticarse como administrador con las credenciales predeterminadas:
Usuario: admin
Contraseña: admin
En la siguiente imagen se observa el proyecto de SonarQube 7.1 con el resultado del reporte de calidad
Vista de la consola web de SonarQube 7.1 autenticado con el perfil de administrador
- Para finalizar la instancia local del servidor de SonarQube 7.1 debe dirigirse a la consola shell y ejecutar el comando docker-compose stop o docker-commpose down
Referencia técnica de los comandos citados:
Archivos disponibles para descargar:
Guía de instalación del Plugin OpenAPI en SonarQube 7.1
El plugin de Sonar OpenAPI incorpora nueve reglas genéricas que permiten analizar el código fuente de servicios construidos bajo los estándares propuestos en la especificación de OpenAPI.
Nota: El plugin Sonar OpenAPI es un proyecto publicado en Github bajo licencia LGPL-3.0 y es compatible con las versiones de OpenAPI 2.0, 3.0.0 y 3.0.1.
Prerrequisitos:
- Servidor de SonarQube 7.1 instalado en Docker container
- Apache Maven instalado y configurado en el sistema
Repositorio oficial de Apache Maven: Maven Download
Pasos de la instalación:
- Actualizar su archivo settings.xml de Maven con la configuración de referencia disponible en el siguiente archivo adjuntado: settings-sonar.xml
Asegurar que esté presente la configuración de las siguientes etiquetas:
<pluginGroup>...</pluginGroup>
<profile>...</profile>
- Establecer una carpeta de trabajo para el proyecto y descargar en ella el código fuente desde el repositorio oficial : sonar-openapi.git
- Editar el pom.xml principal del proyecto y especificar el uso de la versión 7.1 de SonarQube
- Localizar y modificar el valor de las siguientes etiquetas
<sonarQubeMinVersion>7.1</sonarQubeMinVersion
<sonar.version>7.1</sonar.version> - Generar el jar del plugin mediante la compilación con Maven . Para ello en la carpeta de trabajo abrir una consola shell y ejecutar el comando: mvn clean install
La compilación genera un archivo Jar en la carpeta: sonar-openapi-plugin\target . Por defecto el nombre del archivo es: sonar-openapi-plugin-1.2.3-SNAPSHOT.jar
- Copiar el plugin a la carpeta extensions/plugins dentro de la carpeta raíz del servidor de SonarQube
- Reiniciar el servidor de SonarQube para finalizar la instalación
Instalación del Plugin de OpenAPI en un contenedor Docker
Para realizar la instalación manual del plugin de OpenAPI en el contexto de un contenedor Docker, es necesario utilizar el comando docker cp para realizar la operación de copiado del archivo jar.
El comando docker cp permite la copia de archivos entre el sistema de archivos del sistema operativo huésped y el contenedor de Docker
Para realizar la copia mediante el comando docker cp, es necesario conocer el nombre del contenedor docker que contiene al servidor de SonarQube.
- Opción 1: En una consola shell ejecutar el comando docker ps
- Opción 2: Ubicar el nombre del contenedor en Docker Desktop
- El destino de la copia del plugin dentro del contenedor de Docker correspondiente al servidor de SonarQube debe ser el siguiente: /opt/sonarqube/extensions/plugins
Ejemplo de copia en un entorno Windows:
docker cp “C:\dev\sonar-openapi\sonar-openapi-plugin\target\sonar-openapi-plugin-1.2.3-SNAPSHOT.jar” sonarqube_sonarqube_1:”/opt/sonarqube/extensions/plugins”
- Reiniciar el contenedor Docker
- Ingresar a la consola web en: http://localhost:9000
- Usar credenciales predeterminadas: admin / admin
- Validar que las reglas para OpenAPI están disponibles en el menú Rules
Archivos disponibles para descargar:
Integración a proyectos con SonarScanner para Maven
Se recomienda usar SonarScanner como el escáner predeterminado para los proyectos que se gestionen con Maven, ya que permite ejecutar el análisis de SonarQube ante la compilación del desarrollador o mediante un pipeline de integración continua, sin la necesidad de descargar, configurar y mantener manualmente una instalación de SonarQube Runner.
Documentación oficial:
SonarScanner for Maven | SonarQube Docs
Prerrequisitos:
- Java version 8
- Apache Maven configurado con SonarQube settings-sonar.xml
- Servidor de SonarQube 7.1 con plugin de OpenAPI instalado
Procedimiento:
- Abrir una consola shell en la ubicación raíz del proyecto y ejecutar el comando Maven para realizar el análisis del código fuente:
mvn clean verify sonar:sonar - Comprobar la correcta finalización del comando inspeccionando la respuesta que debería ser similar a la siguiente:
- Navegar a la url brindada por el build (resaltado en la imagen anterior en la linea 7) para acceder al informe en SonarQube.
El reporte del análisis quedará disponible como un proyecto creado en el servidor de SonarQube: