Hoy vamos a ver cómo instalar Sonarcube usando un contenedor Docker.

Para ello vamos a utilizar el siguiente contenedor Docker:
version: "3.1" services: sonarqube: image: sonarqube:lts-community container_name: sonarqube hostname: sonarqube ports: - 9000:9000 environment: - sonar.jdbc.url=jdbc:postgresql://posgres_db:5432/sonar - sonar.jdbc.username=posgres - sonar.jdbc.password=adminposgres - sonar.search.javaAdditionalOpts=-Dbootstrap.system_call_filter=false volumes: - ./config/sonarqube/logs:/opt/sonarqube/logs - ./config/sonarqube/data:/opt/sonarqube/data - ./config/sonarqube/extensions:/opt/sonarqube/extensions networks: - docker-network posgres_db: image: postgres:13.1 container_name: posgres_db hostname: posgres_db environment: - POSTGRES_USER=posgres - POSTGRES_PASSWORD=adminposgres volumes: - ./config/postgres/pg_db:/var/lib/postgresql - ./config/postgres/pg_data:/var/lib/postgresql/data ulimits: nofile: soft: 65536 hard: 65536 networks: - docker-network networks: docker-network: driver: bridge external: true
Ahora vamos a ejecutar el código con docker compose up:
docker compose up
Si no ejecuta, deberemos poner permisos a las carpetas /config/sonarqube/ .
sudo chmod -R 777 /config/sonarqube/
Una vez ejecutado deberiamos poder acceder desde http://localhost:9000
Nos pedirá usuario y contaseña:
Por defecto son:
Usuario: admin
Contraseña: admin
Actualizamos la contraseña por una segura:

Ahora añadimos un proyecto, pulsamos en añadir manualmente:

Ponemos un nombre y nos completará la clave y elegimos de que rama queremos desplegar nuestro proyecto:

Ahora nos pide cómo queremos inicializar el repositorio. Elegimos localmente:

Generamos un token y lo guardamos, ya que no aparecerá mas.

Y ahora tendremos que lanzar un comando usando el scanner de SonarCube para completar el proceso.

Para configurar el Scanner en Jenkins:
- Vamos a administrar Jenkins:

- Instalamos el Sonarqube Scanner:

- Ahora vamos a Global Tool Configuration:

- Buscamos SonarCube Scanner, elegimos Añadir SonarQube Scanner y elegimos Instalar Automáticamente con Maven Central. Elegimos una versión y guardamos.

- Para que se ejecute la instalación podemos crear un Job, elegir en Build Steps:

- Execute SonarQube Scanner:

- Le damos a guardar y construir ahora, para que descargue el SonarQube Scanner:

Aunque la ejecución falle, se habrá completado la instalación:

Lo importante es quedarse con la ruta dónde se descomprime el sonar-scanner para luego añadirlo a la variable de entorno.
En este caso: /var/jenkins_home/tools/hudson.plugins.sonar.SonarRunnerInstallation/SonarQube/
Ahora vamos a Configurar Jenkins.
Vamos a Configurar Sistema:

Vamos al apartado de Variables de entorno:

Añadimos una variable de entorno llamada SCANNER_HOME

El contenido es:
/var/jenkins_home/tools/hudson.plugins.sonar.SonarRunnerInstallation/SonarQube/
Vamos a SonarQube Servers y añadimos el nuestro:

Ahora entramos en Server authentication token

Creamos una clave de tipo Secret Text:

Obtenemos la clave que viene en el comando de Execute Scanner y la pegamos dentro de Secret, también lo tendremos que utilizar en el archivo que crearemos abajo.

Guardamos esta configuración y ya tenemos listo nuestro Jenkins para ejecutar desde pipeline.
Ahora vamos a nuestro proyecto y en raíz (a nivel del código). Creamos el archivo sonar-project.properties
Añadimos lo siguiente:
sonar.projectKey=Proyecto sonar.projectName=Proyecto sonar.projectVersion=1.0 sonar.sources=. sonar.python.version=3 sonar.host.url=http://localhost:9000 sonar.login=TOKEN_GENERADO_GUARDADO_EN_SECRET
Ahora añadimos un nuevo stage en el Jenkins file del proyecto, usaremos la variable SCANNER_HOME creada anteriormente.
stage('SonarQube analysis') { environment { scannerHome = "${SCANNER_HOME}" projectPropertiesPath = "./Server/app/sonar-project.properties" } steps { script { def scannerCmd = "${scannerHome}bin/sonar-scanner" sh "${scannerCmd} -Dproject.settings=${projectPropertiesPath}" } } }
Una vez añadido ya podemos lanzar la prueba en Jenkins y SonarQube nos analizará el código.


Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.