Muchas empresas utilizan SonarQube para el análisis estático de código y ejecución de pruebas unitarias, lo que permite entre otras cosas, detectar bugs, vulnerabilidades de seguridad, cobertura de código, y code smells, para diferentes lenguajes de programación (ej: Java, Kotlin, C#, JavaScript, Python, etc.). En este Post os comparto una utilidad Python de línea de comandos para la exportación a CSV de datos de SonarQube, de utilidad para obtener tanto datos de usuario, grupos, y proyectos, como métricas de los diferentes proyectos, y poder ver su evolución en el tiempo. Open Source, totalmente free (repo en GitHub), y preparada para correr en Docker y Kubernetes.
Continuando con las series de Posts sobre Python y sobre SonarQube, en esta ocasión os comparto la primera versión de una utilidad Python de línea de comandos para la exportación a CSV de datos de Sonar, atacando a la API de SonarQube. Similar a atlassian-exporter y jenkins-exporter, pero en este caso con foco en Sonar.
Lo podéis encontrar en el siguiente repo de GitHub (el Readme es bastante autoexplicativo): GitHub – ElWillieES – sonar-exporter
Si antes de continuar leyendo, te interesa, puedes consultar el anterior Post en el que hacíamos una introducción a SonarQube, SonarScanner CLI, y SonarLint, donde además de introducirlo explicamos cómo instalarlo. Dicho esto, continuamos.
En la versión actual, se puede exportar la siguiente información:
- Usuarios, Grupos, y pertenencia de Usuarios a Grupos
- Proyectos de Sonar
- Un conjunto de métricas o medidas predefinida (ej: ncloc, comment_lines, coverage, bugs, code_smells, etc) de cada Proyecto
- Histórico de análisis de cada Proyecto de Sonar
- Histórico de métricas (ej: ncloc, comment_lines, coverage, bugs, code_smells, etc), para cada análisis de cada proyecto de Sonar
Estos datos se obtienen a través de llamadas a la API de SonarQube, que devuelve resultados paginados, que son procesados para generar los CSVs resultantes, para que los podamos importar donde deseemos.
![](https://elwillie.es/wp-content/uploads/2023/04/sonar-exporter-paging.jpg)
Se trata de un programa de línea de comandos, que espera recibir dos parámetros:
- Acción que se desea realizar. Básicamente es indicar qué datos deseamos exportar, que se generarán en la carpeta ./export/
- Fichero de configuración. Proporciona los datos de conexión en un fichero JSON con una formato determinado ubicado en la carpeta ./config/, básicamente los datos de conexión a Sonar.
Las carpetas ./config/ y ./export/ están añadidas al fichero .gitignore, para evitar que se puedan subir tanto credenciales como datos a los repos remotos de Git, por privacidad como por intentar mantener el repo limpio (evitar subir exportaciones de diferentes pruebas, que no aportan valor en el repo remoto).
A continuación se muestra un ejemplo de uso.
python sonar-exporter.py -c sonar_conn_elwillie.json -a export_all_sonar_users
python sonar-exporter.py -c sonar_conn_elwillie.json -a export_all_sonar_groups_and_members
python sonar-exporter.py -c sonar_conn_elwillie.json -a export_all_sonar_projects_with_metrics
python sonar-exporter.py -c sonar_conn_elwillie.json -a export_all_sonar_projects_analyses
python sonar-exporter.py -c sonar_conn_elwillie.json -a export_all_sonar_projects_analyses_metrics
![](https://elwillie.es/wp-content/uploads/2023/04/sonar-exporter-example.jpg)
En el caso de Docker, podemos utilizar un volumen para poder acceder a los datos exportados una vez que ha finalizado la ejecución del contenedor.
rm app/export/*
docker build -t sonar-exporter .
docker images
docker run -v d:/code/elwillie/sonar-exporter/app/export:/usr/src/app/export --rm sonar-exporter python sonar-exporter.py -c sonar_conn_elwillie.json -a export_all_sonar_users
docker run -v d:/code/elwillie/sonar-exporter/app/export:/usr/src/app/export --rm sonar-exporter python sonar-exporter.py -c sonar_conn_elwillie.json -a export_all_sonar_groups_and_members
docker run -v d:/code/elwillie/sonar-exporter/app/export:/usr/src/app/export --rm sonar-exporter python sonar-exporter.py -c sonar_conn_elwillie.json -a export_all_sonar_projects_with_metrics
docker run -v d:/code/elwillie/sonar-exporter/app/export:/usr/src/app/export --rm sonar-exporter python sonar-exporter.py -c sonar_conn_elwillie.json -a export_all_sonar_projects_analyses
docker run -v d:/code/elwillie/sonar-exporter/app/export:/usr/src/app/export --rm sonar-exporter python sonar-exporter.py -c sonar_conn_elwillie.json -a export_all_sonar_projects_analyses_metrics
![](https://elwillie.es/wp-content/uploads/2023/04/sonar-exporter-docker-example.jpg)
Poco más por hoy, como siempre confío que la lectura resulte de interés.