SonarQube para los que no saben, permite validar el código, buenas prácticas, temas de seguridad, como top 10 OWASP, bugs, "código que huele mal" o Code Smell y entrega líneas o tips para corregirlo, a veces, hasta con las líneas de código correcta en el lenguaje que estás usando y que se deben usar. Osea, mas en bandeja no se puede. Los resortes quedan online para todos los del team o jefatura, haciendo visible el stastus con colores, tipo semáforo.
Lo primero, recomiendo tener un Servidor Linux, puede ser CentOS o RHEL con Docker instalado, para que tenga el Servidor de SonarQube, de lo contrario en tu mismo Windows 10 Prof/Ent, deberás tener Docker Desktop for Windows para que entregue el servicio a tu team/usuarios.
Parte 1: Dejar SonarQube corriendo con un usuario no admin
1. Crear Red para que los contenedores de SonarQube y la BBDD Postgres se comuniquen
docker network create redsonarqube
2. Bajar imagen y levantar contenedor de BBDD Postgres SQL
docker run --name sonar-postgres -e POSTGRES_USER=sonar -e POSTGRES_PASSWORD=sonar -d -p 5432:5432 --net redsonarqube postgres
Ejecutar docker ps -a
Para ver como quedó corriendo la BBDD.
3. Bajar imagen y levantar contenedor de SonarQube 8 Community. Quedará corriendo en el port 9000 que es el port por defecto de SonarQube.
3. Bajar imagen y levantar contenedor de SonarQube 8 Community. Quedará corriendo en el port 9000 que es el port por defecto de SonarQube.
docker run --name sonarqube -p 9000:9000 -e SONARQUBE_JDBC_USERNAME=sonar -e SONARQUBE_JDBC_PASSWORD=sonar -e SONARQUBE_JDBC_URL=jdbc:postgresql://sonar-postgres:5432/sonar -d --net redsonarqube sonarqube:8-community
Ejecutar docker ps -a
Para ver como quedó corriendo Sonarqube.
3. Probar. Accede yendo a
http://localhost:9000
Y verás ventana de login:
Si lo dejas en un servidor o tu PC lo quieres dejar con ese servicio, debes darle al resto del team o quien quiera acceder la IP Fija del equipo, por ejemplo:
http://192.168.10.1:9000
4. Logeate a SonarQube con las credenciales.
user: admin
pass: admin
5. Crear un usuario no admin
Usuario: test
pass: 1234
Ve a Administration - Security - Users
En los datos, puedes colocar login, nombre, correo opcional, y clave.
Si entras con ese usuario test también funciona.
Ese usuario se lo puedes dar al resto del team.
Parte 2: Configurar .Net para que compile, revise el código y publique en SonarQube
1. Bajar SonarScanner for MSBuild para cada equipo del desarrollador con Visual Studio
https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for-msbuild/
Bajar el que dice: .NET
Framework 4.6+
sonar-scanner-msbuild-4.7.1.2311-net46.zip
Descomprimir en una carpeta dada y cambiarle el nombre por
uno más corto, ejemplo:
C:\sonarqube\sonar-msbuild\
2. Configurar en cada equipo desarrollo el uso de SonarQube serverIr a la carpeta
C:\sonarqube\sonar-msbuild\sonar-scanner-4.1.0.1829\conf
y abrir archivo sonar-scanner.properties
#Configure here general information about the environment, such as SonarQube server connection details for example
#No information about specific project should appear here
#----- Default SonarQube server
sonar.host.url=http://localhost:9000
#----- Default source code encoding
#sonar.sourceEncoding=UTF-8
Esta parte cámbiala por el Servidor de SonarQube
http://192.168.10.1:9000
Ir a las Variables de Entorno, ir a Variables de Sistema (sección inferior) y editar la variable Path, agregar:
- la ruta donde está SonarScanner.MSBuild.exe
C:\sonarqube\sonar-msbuild
- la ruta de sonar-scanner.bar
C:\sonarqube\sonar-msbuild\sonar-scanner-4.1.0.1829\bin
(Las rutas de la imagen pueden variar de acuerdo a la guía)
SonarScanner.MSBuild.exe
(en la documentación de https://github.com/SonarSource/sonar-scanning-examples/tree/master/sonarqube-scanner-msbuild/CSharpProject Dice que se debe usar SonarQube.Scanner.MSBuild.exe pero al correrlo dice que está deprecado en cambio usar SonarScanner.MSBuild.exe)
Presiona Enter y debe decir lo de abajo:
Para
probar el Scanner que es el más importante, solo escribe en CMD:
sonar-scanner.bat
Te dirá la versión de SonarQube del servidor. También, tratará
de buscar un proyecto para escanear y dará error.
Esto se pide en la documentación oficial: https://docs.sonarqube.org/latest/analysis/scan/sonarscanner-for-msbuild/
Lo primero, es hacer un test rápido. Ve a CMD y escribe
msbuild.exe
Y debe indicar versión 14 o superior. Si te dice una menor como 10 u 12, sigue leyendo.
- Instalar Microsoft .NET Framework 4.6.2
https://www.microsoft.com/es-cl/download/details.aspx?id=48159
Instalar Visual Studio 2015 Edición Community con Update 3
https://my.visualstudio.com/Downloads?q=Visual%20Studio%202015%20with%20Update%203
Este software instala el MsBuild 14 que es la necesaria por SonarQube.
Valida que tengas el archivo (se crea al instalar el IDE recién indicado):
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\WebApplications\ Microsoft.WebApplication.targets
Agregar a las variables de ambiente de sistema, variable Path, la ruta de MsBuild.exe
C:\Program Files (x86)\MSBuild\14.0\Bin
Probar de nuevo yendo a DOS y escribiendo
msbuild.exe
Y ahora si debe indicar versión 14.
5. Configurar reglas de validación a excluir/ignore
Ir a Administración – Configuration – Analysis Scope
Ir a Sección Ignore Issues on MultipleCriteria y setear dos ítems:
- Rule Key Pattern
Es la regla que queremos ignorar. Por ejemplo, si miramos un bug y vemos el detalle, puede tener esto:
A: Error dice: CSS properties should be valid, y tiene el código css:S4654.
Otro caso que vamos a quitar es
B: Images tags and buttons should have an "alt" attribute
Tiene el código: Web:ImgWithoutAltCheck
Ir a Sección Ignore Issues on MultipleCriteria y setear dos ítems:
- Rule Key Pattern
Es la regla que queremos ignorar. Por ejemplo, si miramos un bug y vemos el detalle, puede tener esto:
A: Error dice: CSS properties should be valid, y tiene el código css:S4654.
Otro caso que vamos a quitar es
B: Images tags and buttons should have an "alt" attribute
Tiene el código: Web:ImgWithoutAltCheck
Si queremos omitir ambos casos, debemos poner ambos códigos.
- File Path Pattern
Es el patrón regexp de carpetas o archivos que aplicará ese ignore. Ejemplo si queremos aplicarlo sobre todos los CSHTML:
**/Ejemplo.Web/**/*.cshtml
Luego clic en Save.
Nota: si ya tienes un proyecto y quieres volver a procesarlo con este ignore, debes volver a ejecutar el Build al menos (y no Rebuild completo).
6. Ejecutando Bat con Etapas SonarQube
Coloca la solución .Net en un sitio fácil acceso, ejemplo:
C:\SLN\
Donde dentro de SLN\ está el sln de su solución .Net.
Ejemplo
C:\SLN\Ejemplo.Web\ ---> CSHTML, JS, CSS, etc
C:\SLN\mi.sln
Crea un archivo .bat EjecutaSonarQube.bat con esto:
CD "C:\SLN\"
SonarScanner.MSBuild.exe begin /v:"1.0" /n:"MiProyecto" /k:"RELEASE_1" /d:sonar.host.url="http://192.168.10.1:9000" /d:sonar.verbose=false /d:sonar.login="test" /d:sonar.password="1234" /d:sonar.exclusions="**/Ejemplo.Web/**/jquery.unobtrusive-ajax.js, **/Ejemplo.Web/**/MicrosoftMvcAjax.debug.js, **/Ejemplo.Web/Properties/PublishProfiles/**/*, **/Ejemplo.Web/Scripts/MicrosoftAjax.debug.js"
MSBuild.exe "C:\SLN\mi.sln" /t:Build
SonarScanner.MSBuild.exe end /d:sonar.login="test" /d:sonar.password="1234"
Expliquemos un poco. SonarQube tiene 3 etapas:
- Begin
Es el seteo de parámetros de SonarQube. Va el usuario, clave y Host del Servidor de SonarQube, carpetas o archivos excluidos:
/n: Nombre del proyecto
/k: key única, permite navegar directo, ejemplo, si mi key es test_123 permite navegar directo
http://192.168.10.1:9000/dashboard?id=test_123
/v: versión, debería subir en cada Build o Rebuild
Ejemplo: /v:1.0
/d:sonar.verbose: true o false. Agrega más información tanto en análisis del cliente o del servidor.
/d:sonar.exclusions: archivos o carpetas a excluir. En mi caso sacaré archivos js de Microsoft que no quiero analizar ya que producen falsos positivos. Si agregas más de uno, sepáralos por coma.
Más parámetros acá: https://docs.sonarqube.org/7.4/analysis/analysis-parameters/
En el .Bat se ve acá esta etapa:
SonarScanner.MSBuild.exe begin /v:"1.0" /n:"MiProyecto" /k:"RELEASE_1" /d:sonar.host.url="http://192.168.10.1:9000" /d:sonar.verbose=false /d:sonar.login="test" /d:sonar.password="1234" /d:sonar.exclusions="**/Ejemplo.Web/**/jquery.unobtrusive-ajax.js, **/Ejemplo.Web/**/MicrosoftMvcAjax.debug.js, **/Ejemplo.Web/Properties/PublishProfiles/**/*, **/Ejemplo.Web/Scripts/MicrosoftAjax.debug.js"
- Etapa de Build o Rebuild
- File Path Pattern
Es el patrón regexp de carpetas o archivos que aplicará ese ignore. Ejemplo si queremos aplicarlo sobre todos los CSHTML:
**/Ejemplo.Web/**/*.cshtml
Luego clic en Save.
Nota: si ya tienes un proyecto y quieres volver a procesarlo con este ignore, debes volver a ejecutar el Build al menos (y no Rebuild completo).
6. Ejecutando Bat con Etapas SonarQube
Coloca la solución .Net en un sitio fácil acceso, ejemplo:
C:\SLN\
Donde dentro de SLN\ está el sln de su solución .Net.
Ejemplo
C:\SLN\Ejemplo.Web\ ---> CSHTML, JS, CSS, etc
C:\SLN\mi.sln
Crea un archivo .bat EjecutaSonarQube.bat con esto:
CD "C:\SLN\"
SonarScanner.MSBuild.exe begin /v:"1.0" /n:"MiProyecto" /k:"RELEASE_1" /d:sonar.host.url="http://192.168.10.1:9000" /d:sonar.verbose=false /d:sonar.login="test" /d:sonar.password="1234" /d:sonar.exclusions="**/Ejemplo.Web/**/jquery.unobtrusive-ajax.js, **/Ejemplo.Web/**/MicrosoftMvcAjax.debug.js, **/Ejemplo.Web/Properties/PublishProfiles/**/*, **/Ejemplo.Web/Scripts/MicrosoftAjax.debug.js"
MSBuild.exe "C:\SLN\mi.sln" /t:Build
SonarScanner.MSBuild.exe end /d:sonar.login="test" /d:sonar.password="1234"
Expliquemos un poco. SonarQube tiene 3 etapas:
- Begin
Es el seteo de parámetros de SonarQube. Va el usuario, clave y Host del Servidor de SonarQube, carpetas o archivos excluidos:
/n: Nombre del proyecto
/k: key única, permite navegar directo, ejemplo, si mi key es test_123 permite navegar directo
http://192.168.10.1:9000/dashboard?id=test_123
/v: versión, debería subir en cada Build o Rebuild
Ejemplo: /v:1.0
/d:sonar.verbose: true o false. Agrega más información tanto en análisis del cliente o del servidor.
/d:sonar.exclusions: archivos o carpetas a excluir. En mi caso sacaré archivos js de Microsoft que no quiero analizar ya que producen falsos positivos. Si agregas más de uno, sepáralos por coma.
Más parámetros acá: https://docs.sonarqube.org/7.4/analysis/analysis-parameters/
En el .Bat se ve acá esta etapa:
SonarScanner.MSBuild.exe begin /v:"1.0" /n:"MiProyecto" /k:"RELEASE_1" /d:sonar.host.url="http://192.168.10.1:9000" /d:sonar.verbose=false /d:sonar.login="test" /d:sonar.password="1234" /d:sonar.exclusions="**/Ejemplo.Web/**/jquery.unobtrusive-ajax.js, **/Ejemplo.Web/**/MicrosoftMvcAjax.debug.js, **/Ejemplo.Web/Properties/PublishProfiles/**/*, **/Ejemplo.Web/Scripts/MicrosoftAjax.debug.js"
- Etapa de Build o Rebuild
En el bat se ve en esta sección:
MSBuild.exe “C:\SLN\mi.sln” /t:Rebuild
Si ha has hecho Rebuild varias veces y no quieres hacer todo el proceso de nuevo usas “Build”:
MSBuild.exe “C:\SLN\mi.sln” /t:Build
- Etapa End
Se coloca el usuario y clave del servidor (usuario no admin) ya que aquí se envía la información al server . En el bat se ve en esta sección.
SonarScanner.MSBuild.exe end /d:sonar.login="test" /d:sonar.password="1234"
Ejecutando el Bat
Un truco simple, es abrir CMD y arrastar y solar el bat
7. Validando reportes en SonarQube server
Si entras a SonarQube - Projects, se verán todos los proyectos que se están escaneando
Si entras a Vulnerabilities se ve el detalle de los errores de seguridad.
Si ha has hecho Rebuild varias veces y no quieres hacer todo el proceso de nuevo usas “Build”:
MSBuild.exe “C:\SLN\mi.sln” /t:Build
- Etapa End
Se coloca el usuario y clave del servidor (usuario no admin) ya que aquí se envía la información al server . En el bat se ve en esta sección.
SonarScanner.MSBuild.exe end /d:sonar.login="test" /d:sonar.password="1234"
Ejecutando el Bat
Un truco simple, es abrir CMD y arrastar y solar el bat
Luego presionar Enter.
Yo recomiendo tener dos .bat
EjecutaSonarQubeBuild.bat -- ejecuta Build
EjecutaSonarQubeRebuild.bat -- ejecuta Rebuild
Así lo ejecutas según el caso.
Al presionar Enter se puede demorar unos 10 minutos si es Rebuild, o 5 minutos si es Build, aunque los tiempos varían según el equipo que corre el build y la calidad de la red (debe subir los informes a SonarQube server local)
Se verá en pantalla todos los pasos y detalle de compilación. Cuando termine mostrará resumen.
Nota: A veces se queda pegado pegado en "More about the report…", presiona Control + C para que termine de procesar y muestre resumen.
Si entras a SonarQube - Projects, se verán todos los proyectos que se están escaneando
Si haces clic en el proyecto que acabas de subir, se ve el detalle.
Si haces clic en Bugs se ven los errores (no de seguridad)
Si pinchas en un error dado, se ve el detalle y la línea donde está el error.
Ahora si haces clic en See rule se ve una explicación del error y como corregirlo en ese lenguaje:
Si mandas a compilar de nuevo con el .bat. se genera otro proyecto, ya que la fecha-hora cambió.
8. Dejar los reportes más nuevos
Puedes seleccionar el proyecto de SonarQube Server, con las credenciales de Admin, entrar, Administration , Deletion. Así borras los reportes más viejos.
Bueno, con esto, te dejo a ti el resto, investiga y juegueee.