如何使用 SonarQube 檢查 .NET Core 專案? (macOS)
SonarQube 是一套 程式碼品質檢查工具
,可以幫我們檢查 code 的 bugs、 vulenrability、code smell 與 duplication,也屬於 持續整合
重要的一環。
SonarQube 已經內建 SonarC#,可以直接對 C# 進行檢查,本文將以 .NET Core 為例,並搭配 Jenkins 自動執行 SonarQube。
Version
macOS High Sierra 10.13.4
SonarQube 7.1
Jenkins 2.107.1
.NET Core 2.0.7
GitHub
將 .NET Core 專案放到 GitHub。
- 本文將 .NET Core 專案放在
https://github.com/oomusou/Core2SonarQubeJenkins
當然也可以將 git repository 放在不同的 git server,如 Bitbucket
SonarQube
安裝 SonarQube
1 | $ brew install sonarqube |
使用 Home-brew 安裝 SonarQube。
- 輸入
brew install sonarqube
安裝 - 若想在每次 Mac 重開機就自動執行 SonarQube,輸入
brew services start sonarqube
- 若想自行啟動 SonarQube,輸入
sonar console
啟動 SonarQube
1 | $ sonar console |
使用 sonar console
自行啟動 SonarQube。
- 輸入
sonar console
自行啟動 SonarQube
測試 SonarQube
- 輸入
localhost:9000
,若看到 SonarQube 首頁,則表示安裝成功 - 右上角
Log in
可登入管理設定 SonarQube,預設為admin/admin
SonarQube Scanner for MSBuild
SonarQube 雖然已經包含 SonarC#,但必須靠 SonarQube Scanner for MSBuild 才能執行,預設 SonarQube 並沒有包含 Scanner,必須自行安裝。
其實 SonarQube Scanner for MSBuild 包含 SonarQube Scanner,只是為了 C# 要編譯的特性再包了一層
下載 Scanner
- 到 Analyzing with SonarQube Scanner for MSBuild 下載 Scanner,選擇
Download for .NET core 2.0
下載。
下載後為一 zip
壓縮檔,解壓縮後可安裝在任何目錄。
將 zip
解開後,放到 home directory 下,並重新命名為 SonarScannerMsbuild
。
重新命名只為了縮短目錄名稱而已
設定 Server
SonarQube.Analysis.xml
1 | <Property Name="sonar.host.url">http://localhost:9000</Property> |
編輯 ~/SonarScannerMsbuild/SonarQube.Analysis.xml
,修改 sonar.host.url
、sonar.login
與 sonar.password
三個 property。
- 編輯
SonarQube.Analysis.xml
- 預設是註解,將註解拿掉設定 server 與 login
測試 Scanner
1 | ~/MyProject $ dotnet ~/SonarScannerMsbuild/SonarScanner.MSBuild.dll begin /k:core2 /n:Core2 /v:1.0 |
使用 SonarQube Scanner for MSBuild 對 .NET Core 專案進行檢查。
由於 .NET Core 是跨平台,SonarScanner.MSBuild.dll
必須由 dotnet
執行。
SonarScanner.MSBuild.dll
需指定完整路徑,無法透過$PATH
設定- 需加上
begin
,dotnet build
必須包在 scanner 內 - /k:SonarQube 對專案的 key,內部將以此 key 作為辨別,必須唯一
- /n:在 SonarQube 網頁上顯示的專案名稱
- /v:在 SonarQube 網頁上顯示的版本編號
- 在專案目錄下使用
SonarScanner.MSBuild.dll
檢查 C#
1 | ~/MyProject $ dotnet build |
使用 dotnet build
編譯專案。
Script 類不用編譯,可以直接使用 SonarQube Scanner 就可以檢查,但 C# 需要編譯,因此必須 dotnet build
- 輸入
dotnet build
編譯專案 - Scanner 檢查出警告
1 | ~/MyProject $ dotnet ~/SonarScannerMsbuild/SonarScanner.MSBuild.dll end |
- 需加上
end
,scanner 正式將dotnet build
檢查出的結果寫入 SonarQube project
- 在專案目錄下使用
SonarScanner.MSBuild.dll
結束檢查
進入 SonarQube 網頁,就可看到 Core2
專案已經出現 SonarQube,也顯示剛剛 dotnet build
檢查出的 1
個 code smell 警告。
到目前為止,SonarQube 對 C# 的檢查已經完成,就算只將 SonarQube 裝在本機,也對 C# 程式碼品質的檢查有很大的幫助。
若能搭配 Jenkins 自動執行 SonarQube,那就更好了。
Jenkins
安裝 Jenkins
1 | $ brew install jenkins |
使用 Homebrew 安裝 Jenkins。
- 輸入
brew install jenkins
安裝 - 若想在每次 Mac 重開機就自動執行 Jenkins,輸入
brew services start jenkins
- 若想自行啟動 Jenkins,輸入
jenkins
啟動 Jenkins
1 | $ jenkins |
使用 jenkins
自行啟動 Jenkins。
Unlock Jenkins
- 輸入
localhost:8080
,看到 Unlock Jenkins,開始設定 Jenkins - 預設密碼放在
~/jenkins/secrets/initialAdminPassword
- 將預設密碼貼上
- 按
Continue
繼續
Customize Jenkins
- 選擇
Install suggested plugins
即可
Getting Started
安裝 suggested plugin 中。
Create Admin User
- 建立管理者帳號
- 按
Save and Finish
繼續
Jenkins is Ready
- Jenkins 安裝完成,按
Start using jenkins
開始使用 Jenkins
Welcome to Jenkins
- 進入 Jenkins 管理介面,如此 Jenkins 已經設定成功
Jenkins Job
建立 Job
- 按左側
New Item
建立新 job
- 輸入 Job 名稱
- 選擇
Freestyle project
- 按
OK
繼續
Source Code Management
- 找到
Source Code Management
區段 - 將 Git 的
Repository URL
設定到https://github.com/oomusou/Core2SonarQubeJenkins
Build Environment
- 找到
Build Environment
區段 - 勾選
Delete workspace before build starts
Build
- 找到
Build
區段 - 選擇
Add build step
- 新增
Execute shell
- 講以下 command 貼上
1 | dotnet /Users/oomusou/SonarScannerMsbuild/SonarScanner.MSBuild.dll begin /k:core2 /n:Core2 /v:1.0 |
- 按
Save
儲存設定
- 按左側
Build Now
執行 Job
- Job 執行成功會出現
藍燈
剛剛 Jenkins 執行的 Project 出現在 SonarQube 上。
Conclusion
- SonarQube 已經內建 SonarC#,也可以用來檢查 C# 與 .NET Core
- 就算不將 SonarQube 安裝在 server,安裝在本機也能有效的檢查 C# 程式碼品質
- 藉由 Jenkins 幫忙,我們就可以自動化執行 SonarQube
Sample Code
完整的範例可以在我的 GitHub 上找到
Reference
SonarQube, Analyzing with SonarQube Scanner for MSBuild
SonarQube, Analying with SonarQube Scanner for Jenkins