aprenderDevOps

Para profesionales TI interesados en DevOps

  • Inicio
  • Acerca de
  • Categorías
    • Aseguramiento de la calidad
    • Cloud
    • Contenedores
    • Infraestructura como código
    • Integración y entrega continua
    • Otros
  • Recursos
    • GitHub
    • Docker Hub
  • Contacto

25 de febrero de 2018 por Arturo

Instalación de SonarQube con Docker

Instalación de SonarQube con Docker

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.

Instalación de SonarQube con Docker

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.

Archivado en: Aseguramiento de la calidad, Contenedores, Infraestructura como código Etiquetado con: análisis estático de código, docker, sonarqube

Comentarios

  1. NameHidden dice

    22 de mayo de 2018 en 16:36

    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

    Responder
    • adan dice

      22 de enero de 2020 en 14:31

      El guión de la d, no tiene la misma longitud que el otro, prueba con esto:
      docker-compose up -d

      Responder
  2. Diego dice

    31 de enero de 2020 en 23:13

    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.

    Responder
    • Diego dice

      31 de enero de 2020 en 23:50

      Solucionado. No se me había actualizado bien el PATH

      Responder
  3. angel dice

    3 de agosto de 2020 en 09:31

    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

    ¿?

    Responder
    • Gerardo Flores dice

      4 de julio de 2022 en 21:58

      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

      Responder
  4. angel lerena dice

    4 de agosto de 2020 en 13:26

    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.

    Responder
  5. hugh dice

    30 de noviembre de 2020 en 10:31

    a mi se me cae el contenedor de sonarqube a los 20 segundos de levantarse, sabéis por que puede ser?

    Responder
    • Sandra Gamboa dice

      22 de diciembre de 2020 en 21:25

      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.

      Responder
  6. Diego dice

    3 de enero de 2021 en 13:15

    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í.

    Responder
    • Luis dice

      6 de enero de 2021 en 08:34

      Se te agradece estoy en la parte de integración continúa y ando sobre ello

      Responder
      • Gabriel dice

        28 de septiembre de 2021 en 09:47

        Hola, han actualizado el compose?

        Responder
    • Arturo dice

      26 de octubre de 2021 en 02:47

      Hola, gracias por vuestros comentarios. He actualizado la entrada. Con los nuevos cambios ya debería funcionar.

      Responder

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Lista de correo

Únete y recibe gratis en tu correo contenido actualizado.

Sígueme en la red

  • Correo electrónico
  • Facebook
  • GitHub
  • LinkedIn
  • RSS
  • Twitter
  • YouTube

Categorías

  • Aseguramiento de la calidad
  • Contenedores
  • Infraestructura como código
  • Integración y entrega continua
  • Otros
  • Correo electrónico
  • Facebook
  • GitHub
  • LinkedIn
  • RSS
  • Twitter
  • YouTube
  • Inicio
  • Acerca de
  • Categorías
  • Recursos
  • Contacto

Copyright © 2023 aprenderDevOps