Analizzare progetti .NET con SonarQube
SonarQube è uno strumento potente ma integra da poco la possibilità di analizzare progetti C# e .NET più nello specifico. Per questo motivo, è più macchinoso analizzare questi tipi di progetti rispetto ad altri ed è per questo motivo che ho deciso di scrivere questa mini-guida (per Windows) che evidenzi degli aspetti che la guida ufficiale di SonarQube tralascia o presenta in modo sparso.
La documentazione ufficiale di riferimento è questa e qui di seguito farò riferimento ai soli procedimenti per l'analisi su sistema operativo Windows. Per l'utilizzo con altri sistemi operativi vi rimando al link.
Installazione di base
Per questa parte la guida ufficiale è ben chiara, ma riporterò comunque i passaggi necessari in maniera stringata, dando per scontato che abbiate già una versione del .NET Framework v4.6+ installata sul vostro computer (di solito inclusa in Visual Studio) come spiegatovi alla pagina Contribuisci. É possibile analizzare un progetto .NET anche senza aver installato Visual Studio, e in tal caso dovete installare separatamente .NET v4.6+
- Installate l'ultima versione di SonarQube
- Scaricate il plugin SonarC# e posizionate il .jar nella cartella SonarQube/extensions/plugins che avete poc'anzi scaricato.
- Scaricate lo zip relativo all'ultima versione dello Scanner per MSBuild
- Prima di unzipparlo fate click destro sullo zip > Proprietà > Rimuovi blocco (in basso)
- Unzippate l'archivio (vi suggerisco all'interno della cartella sonarqube/bin/os-version che avete scaricato al punto 1)
- Aggiungete alla variabile PATH di sistema il path della directory in cui avete unzippato lo Scanner per MSBuild. Se diversa da quella in cui è presente Sonar, potete opzionalmente aggiungere anche quest'ultima directory alla vostra variabile PATH.
- Aggiungete alla variabile PATH anche la directory relativa al .NET Framework e più specificatamente quella che contiene MSBuild.exe, solitamente questa "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\" oppure questa "C:\Windows\Microsoft.NET\Framework\v4.0.30319\".
- Assicuratevi di aver installato sul vostro computer la Java JRE/JDK 8+, altrimenti installatela e assicuratevi che la JAVA_HOME sia settata tra le variabili di sistema.
A questo punto potete finalmente eseguire Sonar per la prima volta. Se avete precedentemente aggiunto alla PATH la directory di sonarqube, aprite una finestra cmd e lanciate il comando startsonar
; viceversa andate nella sonarqube/bin/os-version e avviate StartSonar.bat.
Se tutto va bene, Sonar dovrebbe scaricare alcuni plugin e a procedura ultimata rendersi disponibile all'indirizzo localhost:9000 del vostro computer. Non chiudete mai la finestra cmd su cui è avviato Sonar; se avete finito di usarlo, terminate il processo con Crtl + C.
Analizzare il progetto
Ora che SonarQube funziona non vi resta che analizzare il progetto. Se avete fatto tutto correttamente sarà semplicemente necessario recarti nella root della soluzione BrewDay (la root della cartella scaricata da GitHub) ed eseguire i tre comandi qui di seguito.
SonarQube.Scanner.MSBuild begin /k:"BrewDay"
MSBuild /t:Rebuild
SonarQube.Scanner.MSBuild end
- Il primo comando si occupa di inizializzare l'analisi e predisporre la cartella .sonarqube nella cartella in cui lanciate i comandi. "BrewDay" è la chiave che identificherà univocamente il vostro progetto (dalla prima analisi in poi). Potete modificarla ma sappiate che ad ogni analisi lanciata con una nuova chiave, Sonar creerà di fatto un nuovo progetto sul proprio database.
- Il secondo comando si occupa semplicemente di rebuildare il progetto .NET (attenzione: va fatto così, perché facendolo da Visual Studio non funzionerebbe).
- Il terzo e ultimo comando segnala allo Scanner che la build è completa e avvia la post-analisi che genera i risultati visualizzabili su localhost:9000.
Problemi
Se tentando di analizzare il progetto, un messagio d'errore vi comunica che SonarQube.Scanner.MSBuild o MSBuild non sono riconosciuti come comandi, assicuratevi di aver aggiunto correttamente le directory che vi ho detto alla variabile PATH di sistema. In alternativa è possibile (se avete Visual Studio installato), eseguire i tre comandi dalla Developer Command Prompt for VS.
Se avete altri problemi con Sonar, Java, MSBuild o lo Scanner potete contattare Marco qualora Google non sia stato di vostro aiuto.
Scorciatorie e consigli
Le analisi di SonarQube sono ampiamente personalizzabili con un sacco di opzioni. Peccato che con lo Scanner di MSBuild sia un po' macchinoso creare un file che memorizzi le impostazioni dell'utente. Quindi, se volete lanciare analisi personalizzate vi suggerisco di inserire le vostre impostazioni direttamente dalla UI disponibile su localhost:9000 (loggando come admin-admin), oppure farvi un file .bat che esegua in sequenza i tre comandi sopra presentati e specifichi al primo comando i parametri necessari per l'analisi. Dovreste scaricare un file analogo direttamente dal repository, ma qualora non accadesse vi lascio qui un esempio:
SonarQube.Scanner.MSBuild begin /k:"BrewDay" /d:sonar.exclusions="**/vendor/**/*" /d:sonar.web.file.suffixes=".html,.cshtml" /d:sonar.coverage.exclusions="**/*"
MSBuild /t:Rebuild
SonarQube.Scanner.MSBuild end
Queste opzioni dicono a Sonar di:
- Non considerare la cartella vendor per l'analisi, ossia quella contenente le librerie javascript e css che non sono state scritte da noi.
- Considerare oltre ai file .html anche i file .cshtml tipici di .NET MVC per l'analisi dell'HTML (credo richieda l'installazione di questo plugin).
- Escludere tutti i file e le cartelle dall'analisi sui coverage, ossia la copertura dei test. Il nostro progetto è privo di test quindi inutile analizzarli.