Instalación
Docker
Podemos simplemente ejecutar el comando Docker para iniciar SonarQube y tener un primer contacto, pero el problema de hacer esto es que perdemos todos los datos en cuanto destruimos el contenedor.
docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube:lts-community
Estará disponible en localhost:9000 con usuario: admin y contraseña: admin.

Podríamos iniciarlo preconfigurado utilizando docker compose para levantar un entorno completo listo para usar.
services:
sonarqube:
image: sonarqube:lts-community
depends_on:
- db
networks:
- sonarnet
environment:
- SONARQUBE_JDBC_USERNAME=sonar
- SONARQUBE_JDBC_PASSWORD=sonar
- SONARQUBE_JDBC_URL=jdbc:postgresql://db:5432/sonar
- SONAR_ADMIN_USERNAME=admin
- SONAR_ADMIN_PASSWORD=admin
ports:
- "9000:9000"
volumes:
- sonarqube_conf:/opt/sonarqube/conf
- sonarqube_data:/opt/sonarqube/data
- sonarqube_logs:/opt/sonarqube/logs
- sonarqube_extensions:/opt/sonarqube/extensions
db:
image: postgres:13-alpine
container_name: sonarqube_db
networks:
- sonarnet
environment:
- POSTGRES_USER=sonar
- POSTGRES_PASSWORD=sonar
- POSTGRES_DB=sonar
volumes:
- postgresql_data:/var/lib/postgresql/data
networks:
sonarnet:
volumes:
sonarqube_conf:
sonarqube_data:
sonarqube_logs:
sonarqube_extensions:
postgresql_data:
Volúmenes de SonarQube:
-
sonarqube_conf:/opt/sonarqube/conf: Se preservan las configuraciones personalizadas de SonarQube. Si cambias ajustes como la URL de la base de datos o parámetros de autenticación, estos cambios no se perderán cuando se reinicie el contenedor. -
sonarqube_data:/opt/sonarqube/data: Almacena datos persistentes de SonarQube, incluyendo índices, historial de análisis y otros datos procesados. -
sonarqube_logs:/opt/sonarqube/logs: Almacena los registros generados por SonarQube. -
sonarqube_extensions:/opt/sonarqube/extensions: Almacena plugins y extensiones instalados en SonarQube. -
postgresql_data:/var/lib/postgresql/data: Almacena los datos de la base de datos PostgreSQL, incluyendo tablas, índices y registros.
Existen otras instalaciones que pueden realizarse directamente como servicio en tu máquina local o en el servidor.
Kubernetes
Vamos directamente a la documentación de instalación en kubernetes.
Para la instalación en un clúster, podemos utilizar Helm. Instalando en un clúster personal en la máquina local.
helm repo add sonarqube https://SonarSource.github.io/helm-chart-sonarqube
helm repo update
kubectl create namespace sonarqube
helm show values sonarqube/sonarqube > values.yaml
# Analiza el values.yaml y verifica si hay algo que te gustaría cambiar como añadir el ingress, número de réplicas, namespace de prometheus, etc.
# Si los repositorios del proyecto están en algún servidor git fuera del clúster, será necesario configurar el ingress para que pueda recibir informes del escáner.
helm upgrade --install -n sonarqube sonarqube sonarqube/sonarqube
❯ kubectl get all -n sonarqube
NAME READY STATUS RESTARTS AGE
pod/sonarqube-postgresql-0 1/1 Running 6 (25m ago) 41h
pod/sonarqube-sonarqube-0 1/1 Running 6 (25m ago) 41h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/sonarqube-postgresql ClusterIP 10.107.128.240 <none> 5432/TCP 41h
service/sonarqube-postgresql-headless ClusterIP None <none> 5432/TCP 41h
service/sonarqube-sonarqube ClusterIP 10.100.238.187 <none> 9000/TCP 41h
NAME READY AGE
statefulset.apps/sonarqube-postgresql 1/1 41h
statefulset.apps/sonarqube-sonarqube 1/1 41h
# Solo exponiendo el servicio localmente para acceder
kubectl port-forward -n sonarqube svc/sonarqube-sonarqube 9000:9000
Después de cambiar la contraseña, llegamos a la parte principal.

SonarCloud
Si quieres utilizar SonarQube como SaaS, simplemente crea una cuenta en SonarCloud y todo estará listo sin misterio. Puedes iniciar sesión con tu cuenta de GitHub, GitLab, Azure DevOps e incluso SSO.
Componentes
Observando la imagen inferior, podemos entender que el escáner es quien realiza el análisis estático y envía el informe al servidor que mantiene los datos en una base de datos. Una vez con el informe, el servidor propone mejoras y correcciones que deben realizarse basándose en reglas.
Es necesario ejecutar el escáner durante el pipeline, y ya podemos rechazar el pull request en este momento si el código tiene problemas. El informe debe enviarse a SonarQube para que los miembros del equipo puedan ver la clasificación, consultar las recomendaciones de corrección y los motivos por los que el código no pasó.
