204 lines
5.3 KiB
Markdown
204 lines
5.3 KiB
Markdown
|
|
# 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`
|
|
|
|
```python
|
|
def greet(name):
|
|
return f"Hola, {name}!"
|
|
|
|
if __name__ == "__main__":
|
|
print(greet("mundo"))
|
|
```
|
|
|
|
### `utils.py`
|
|
|
|
```python
|
|
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:
|
|
|
|
```properties
|
|
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:
|
|
|
|
```yaml
|
|
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:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
docker-compose run sonarscanner
|
|
```
|
|
|
|
## Paso 5: Ver los Resultados
|
|
|
|
Accede a la interfaz de SonarQube en [http://localhost:9000](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:
|
|
|
|
```bash
|
|
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!
|
|
|
|
|