Curso-lenguaje-python/catch-all/05_infra_test/06_sonarqube
2024-08-09 02:22:44 +02:00
..
app Add sonarqube test 2024-08-09 02:22:44 +02:00
docker-compose.yaml Add sonarqube test 2024-08-09 02:22:44 +02:00
README.md Add sonarqube test 2024-08-09 02:22:44 +02:00
sonar-project.properties Add sonarqube test 2024-08-09 02:22:44 +02:00

SonarQube Python Analysis con Docker

Este tutorial te guía a través de la configuración y ejecución de un análisis de calidad de código de un proyecto Python utilizando SonarQube y Docker Compose.

Requisitos previos

  • Docker y Docker Compose instalados en tu máquina.

Estructura del proyecto

Asegúrate de que tu directorio de proyecto tenga la siguiente estructura:

my-python-project/
│
├── app/                   
│   ├── __init__.py
│   ├── main.py
│   └── utils.py
│
├── sonar-project.properties
├── docker-compose.yaml
└── README.md

Paso 1: Crear un Proyecto Python de Ejemplo

Dentro de la carpeta app, crea los siguientes archivos:

main.py

def greet(name):
    return f"Hola, {name}!"

if __name__ == "__main__":
    print(greet("mundo"))

utils.py

def add(a, b):
    return a + b

def subtract(a, b):
    return a - b

__init__.py

Este archivo puede estar vacío, simplemente indica que app es un paquete Python.

Paso 2: Configurar SonarQube y SonarScanner

2.1. Archivo sonar-project.properties

En la raíz de tu proyecto, crea un archivo llamado sonar-project.properties con el siguiente contenido:

sonar.projectKey=my-python-project
sonar.projectName=My Python Project
sonar.projectVersion=1.0
sonar.sources=./app
sonar.language=py
sonar.python.version=3.8
sonar.host.url=http://sonarqube:9000
sonar.login=admin
sonar.password=admin

Asegúrate de reemplazar my-python-project, My Python Project, y la ruta del código fuente según corresponda.

Paso 3: Crear docker-compose.yaml

Crea un archivo docker-compose.yaml en la raíz de tu proyecto con el siguiente contenido:

services:
  sonarqube:
    image: sonarqube:lts-community
    container_name: sonarqube
    ports:
      - "9001:9000"
    environment:
      - SONARQUBE_JDBC_URL=jdbc:postgresql://sonarqube-db:5432/sonar
      - SONARQUBE_JDBC_USERNAME=sonar
      - SONARQUBE_JDBC_PASSWORD=sonar
      - SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true
    volumes:
      - sonarqube_data:/opt/sonarqube/data
      - sonarqube_logs:/opt/sonarqube/logs
      - sonarqube_extensions:/opt/sonarqube/extensions
    networks:
      - sonarnet
    depends_on:
      - elasticsearch
      - sonarqube-db

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2
    container_name: elasticsearch
    environment:
      - discovery.type=single-node
      - ES_JAVA_OPTS=-Xms512m -Xmx512m
    volumes:
      - elasticsearch_data:/usr/share/elasticsearch/data
    networks:
      - sonarnet

  sonarqube-db:
    image: postgres:16.3-alpine3.20
    container_name: sonarqube-db
    environment:
      - POSTGRES_USER=sonar
      - POSTGRES_PASSWORD=sonar
      - POSTGRES_DB=sonar
    networks:
      - sonarnet
    volumes:
      - sonar_db:/var/lib/postgresql
      - sonar_db_data:/var/lib/postgresql/data

  sonarscanner:
    image: sonarsource/sonar-scanner-cli
    container_name: sonarscanner
    depends_on:
      - sonarqube
    volumes:
      - .:/usr/src
    working_dir: /usr/src
    networks:
      - sonarnet
    entrypoint: ["sonar-scanner"]

networks:
  sonarnet:
    driver: bridge

volumes:
  sonarqube_data:
  sonarqube_logs:
  sonarqube_extensions:
  elasticsearch_data:
  sonar_db:
  sonar_db_data:

Explicación

  • SonarQube: Configurado para depender de Elasticsearch y PostgreSQL. Usa el contenedor sonarqube:lts-community que incluye SonarQube.
  • Elasticsearch: Usa una imagen oficial de Elasticsearch (versión 7.10.2) adecuada para la versión de SonarQube que estás utilizando. Configurado para funcionar en modo de nodo único (discovery.type=single-node).
  • PostgreSQL: Configurado para servir como la base de datos para SonarQube.
  • SonarScanner: Configurado para ejecutar el análisis de código.

Paso 4: Ejecutar el Análisis

  1. Inicia SonarQube, Elasticsearch y PostgreSQL:

    En el directorio raíz de tu proyecto, ejecuta el siguiente comando para iniciar los servicios:

    docker-compose up -d
    

    Esto levantará los contenedores de SonarQube, Elasticsearch y PostgreSQL. Dale unos minutos para que se inicien completamente.

  2. Ejecuta el Análisis:

    Una vez que SonarQube, Elasticsearch y PostgreSQL estén listos, ejecuta el siguiente comando para iniciar el análisis del código:

    docker-compose run sonarscanner
    

Paso 5: Ver los Resultados

Accede a la interfaz de SonarQube en http://localhost:9000. Inicia sesión con las credenciales predeterminadas:

  • Usuario: admin
  • Contraseña: admin

Aquí podrás ver los resultados del análisis de calidad de tu código, incluyendo cualquier vulnerabilidad o deuda técnica identificada.

Paso 6: Detener y Limpiar los Contenedores

Para detener y eliminar los contenedores, ejecuta:

docker-compose down

Esto detendrá los servicios y limpiará los recursos.

Notas Finales

  • Asegúrate de ajustar el archivo sonar-project.properties para que coincida con las especificaciones de tu proyecto.
  • Puedes personalizar la configuración del contenedor de SonarQube en el archivo docker-compose.yaml según sea necesario.

¡Disfruta de un análisis de código más limpio y seguro con SonarQube!