
Vamos a ver cómo instalar SonarQube utilizando contenedores Docker.
En esta ocasión nos centraremos únicamente en la instalación de SonarQube. En posteriores entradas veremos cómo integrar SonarQube con otras herramientas DevOps y cómo utilizarlo para analizar la calidad de los desarrollos.
¿Qué es SonarQube?
SonarQube (conocido anteriormente como Sonar) es una herramienta open source para evaluar la calidad del código fuente. Utiliza herramientas de análisis estático de código fuente para obtener métricas de calidad del código.
Estas son algunas de las características de SonarQube que hacen que sea una de las soluciones de evaluación de calidad del software más utilizadas:
- Es open source aunque también se puede optar por ediciones comerciales que incluyen soporte dedicado.
- Analizadores de más de 20 lenguajes de programación entre los que se incluyen Java, JavaScript, Python, PHP, C/C++, C# o VB.NET.
- Es fácil de integrar dentro de la cadena de herramientas de DevOps. Esto incluye los sistemas de compilación como Maven, Gradle o Ant y los motores de integración continua como Jenkins, Bamboo, Travis CI o Visual Studio Team Foundation Server.
Requisitos de instalación de SonarQube
Los requisitos necesarios para poder instalar SonarQube se detallan en el siguiente enlace a la documentación de SonarQube: https://docs.sonarqube.org/latest/requirements/requirements/
De entre todos los requisitos detallados en la documentación cabe destacar lo siguiente:
- Es necesario tener instalado Java 11 (Oracle JRE 11 u OpenJDK 11).
- Se necesitan al menos 3 Gb de memoria.
- El espacio en disco necesario depende de la cantidad de código fuente a analizar.
- El almacenamiento debe tener un excelente rendimiento de lectura/escritura.
- Se necesita una base de datos para almacenar la configuración de SonarQube, así como otra información necesaria para el correcto funcionamiento de la solución. Las bases de datos soportadas son PostgreSQL, Microsoft SQL Server, Oracle y MySQL. En nuestro caso vamos a utilizar una base de datos PostgreSQL.
¿Qué necesitáis para hacer este laboratorio?
La utilización de contenedores Docker simplifica mucho la instalación de SonarQube. Únicamente se necesita contar con un equipo que tenga Docker instalado. Si no tenéis Docker instalado, podéis seguir las instrucciones de instalación para vuestro sistema operativo en la web oficial de Docker.
A continuación, vamos a ver cómo instalar SonarQube utilizando contenedores Docker.
¿Qué imágenes Docker elegir?
Vamos a necesitar dos imágenes Docker: una para el servidor SonarQube y otra para la base de datos, en este caso PostgreSQL. Concretamente, las imágenes que vamos a utilizar son la imagen oficial de SonarQube (sonarqube) y la imagen oficial de PostgreSQL (postgres).
Instalación de SonarQube utilizando docker-compose
Para facilitar la instalación de SonarQube en contenedores Docker vamos a utilizar el comando docker-compose.
A continuación, podéis ver el fichero docker-compose.yml que describe cómo se van a ejecutar los contenedores.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
version: '2' services: sonarqube: image: sonarqube ports: - "9000:9000" networks: - sonarnet environment: - SONARQUBE_JDBC_URL=jdbc:postgresql://db:5432/sonar - SONARQUBE_JDBC_USERNAME=sonar - SONARQUBE_JDBC_PASSWORD=sonar volumes: - sonarqube_conf:/opt/sonarqube/conf - sonarqube_data:/opt/sonarqube/data - sonarqube_extensions:/opt/sonarqube/extensions - sonarqube_bundled-plugins:/opt/sonarqube/lib/bundled-plugins db: image: postgres networks: - sonarnet environment: - POSTGRES_USER=sonar - POSTGRES_PASSWORD=sonar volumes: - postgresql:/var/lib/postgresql - postgresql_data:/var/lib/postgresql/data networks: sonarnet: driver: bridge volumes: sonarqube_conf: sonarqube_data: sonarqube_extensions: sonarqube_bundled-plugins: postgresql: postgresql_data: |
Para arrancar los contenedores ejecutamos el siguiente comando:
1 |
$ docker-compose up -d |
Acceso a la consola de SonarQube
Una vez arrancados los contenedores, abrimos un navegador web y accedemos a http://localhost:9000 para acceder a la consola de SonarQube.
El usuario y la contraseña predeterminados son admin y admin respectivamente. La primera ver que accedamos nos pedirá que cambiemos la contraseña.

Código fuente del laboratorio
Podéis descargar o clonar el código fuente completo de este laboratorio de GitHub de https://github.com/aprenderdevops/docker-sonarqube.
docker-compose up –d
cuando ejecuto esto me pone «Segmentation fault»
puede ser por la version de windows? tengo windows 7 home premiun y puede ser por eso? me he instalado el DockerToolbox
El guión de la d, no tiene la misma longitud que el otro, prueba con esto:
docker-compose up -d
Hola,
Me tira el siguiente error cuando ejecuto el comando sonar-scanner, no lo lleva la imagen de sonar?
zsh: command not found: sonar-scanner
Gracias!
Un saludo.
Solucionado. No se me había actualizado bien el PATH
Al realizar «docker-compose up -d» se lanzan los 2 contenedores, pero a los pocos segundos el contenedor que corre Sonar «sonar_sonarqube_1» ejecuta «exit 0» y se para, dejando de publicar el servicio por el puerto 9000
¿?
prueba dando el comando docker-compose logs, en mi caso era por la variable vm.max_map_count
y use este link para solucionarlo https://community.sonarsource.com/t/docker-install-elastic-search-vm-max-map-count/37270/9
Con esta configuración el contenedor se para con mensaje «exit 0».
Si revisamos los logs, el problema está en que no es capaz de realizar login a la bbdd.
El problema está en que solo se le ha indicado a sonar el esquema de BBDD a utilizar «sonar» en el contenedor «db» por su puerto «5432», pero no se le ha pasado las credenciales.
Para ello, es necesario añadir las siguientes variables al contenedor «sonarqube» en su sección environment:
– SONARQUBE_JDBC_USERNAME=sonar
– SONARQUBE_JDBC_PASSWORD=sonar
La primera vez que arranquemos, tardará un poco al construir la BBDD.
a mi se me cae el contenedor de sonarqube a los 20 segundos de levantarse, sabéis por que puede ser?
Hola Puede ser memoria configurada en el contenedor Docker: Cómo modificamos los límites de uso de recursos en un contenedor
Este es un ejemplo de como se puede configurar:
# docker container update ce7aea05b590 –memory=16M –memory-swap=-1 –cpuset-cpus=2
Luego vemos como quedaron los valores máximos.
# docker container inspect ce7aea05b590
Podemos usar “grep” para ver solo alguno de los valores.
# docker container inspect ce7aea05b590 | grep emory
# docker container inspect ce7aea05b590 | grep pusetC
# docker container inspect ce7aea05b590 | grep Swap
…
«MemorySwap»: -1,
«CpusetCpus»: «2»,
«Memory»: 16777216,
…
Existen unos pocos valores mas para ajustar,
–memory-swappiness.
–memory-swap.
–oom-kill-disable.
Y otros relacionados con realtime.
Hola, estaría bien que intentéis adaptar esta guía a 2021. Con estos comandos ya no funciona. Si consigo sacar algo a partir de este punto de partida os lo pego por aquí.
Se te agradece estoy en la parte de integración continúa y ando sobre ello
Hola, han actualizado el compose?
Hola, gracias por vuestros comentarios. He actualizado la entrada. Con los nuevos cambios ya debería funcionar.