SonarQube 是一套分析程式碼品質的工具,支援超過 25 種程式語言,如 C/C++、C#/VB.NET、Java、JavaScript、Python…等。這邊為測試架設 SonarQube 系統時所製作的筆記。
SonarQube 程式碼品質分析工具用 7 個維度來分析程式碼品質,包括:
- 程式架構 Architecture & Design
- 冗餘程式 Duplications
- 單元測試 Unit tests
- 複雜度 Complexity
- 潛在問題 Potential bugs
- 寫作原則 Coding rules
- 註解 Comments
因此 SonarQube 還可以與 CI 做結合,讓 SonarQube 成為持續整合當中的一環,可以幫助節省一部分人工 Code Review 的力氣,也可以幫助提前發現一些不小心忽略的疏失。

環境設定
SonarQube 是使用 Java 開發開源專案,支援 Windows、Mac、Linux 多種平台,這裡以 Windows 來作為操作環境。
- 安裝 Java SE Development Kit 8
- 更新 Microsoft JDBC Drivers (非必要)
- 下載位置:https://www.microsoft.com/zh-tw/download/details.aspx?id=11774
- SonarQube 安裝檔中已經有自帶 Microsoft JDBC Drivers,因此這項非必要
- SonarQube 必須搭配一套資料庫系統
- 請參考官方建議清單
- 目前只支援 SQL Server 2014 以上版本
- 設定資料庫(以 SQL Server 2014 為例)
建立資料庫帳號
sonar建立名稱為
SonarQube的資料庫,並將上面的資料庫帳號sonar設定為資料庫擁有者建立時務必選擇正確的定序
- Case-Sensitive (CS) 和 Accent-Sensitive (AS) (例:
Chinese_Taiwan_Stroke_CI_AS) - 備註:繁體中文預設定序為
Chinese_Taiwan_Stroke_CI_AS
- Case-Sensitive (CS) 和 Accent-Sensitive (AS) (例:
建立時務必開啟 READ_COMMITTED_SNAPSHOT
- 開啟指令
ALTER DATABASE [YourSonarQubeDatabase] SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE; - 避免 MS SQL 資料庫的交易鎖定造成死結問題
- 開啟指令
啟動 SQL Server 組態管理員
- 需要啟動 TCP/IP 通訊協定服務
- 其中要設定 TCP 通訊埠為 1433 (如下圖)

安裝 SonarQube
- 下載
- 安裝
- 將
SonarQube壓縮檔解壓縮到指定目錄,例如C:\SonarQube\ - 將
SonarQube Scanner for MSBuild壓縮檔解壓縮到指定目錄,例如C:\SonarQube\bin\sonar-scanner\ - 這裡的安裝目錄可自訂
- 將
- 設定環境變數
- 推薦使用 Rapid Environment Editor 修改系統環境變數
- 在使用者變數的
Path中加入C:\SonarQube\bin\sonar-scanner\方便後續使用MSBuild.SonarQube.Runner.exe
- 修改
SonarQube設定檔\conf\sonar.properties主要修改下列三個參數sonar.jdbc.username資料庫連線帳號soanr.jdbc.password資料庫連線密碼sonar.jdbc.url資料庫連線字串(使用 JDBC)- 參考下列範例,正式環境建議另外建立一個 DB 使用帳戶,並使用後者方式
1 | # 使用 Integrated Security 時 |
啟動 SonarQube
- 測試啟動 SonarQube
- 執行
C:\SonarQube\bin\windows-x86-64\StartSonar.bat - 第一次執行會需要一點時間讓資料庫初始化
- 執行
- 把 SonarQube 安裝成 Windows Service,使之可以背景自動啟動
- 執行
C:\SonarQube\bin\windows-x86-64\InstallNTService.bat安裝服務 - 執行
C:\SonarQube\bin\windows-x86-64\StartNTService.bat啟動服務
- 執行
- 預設 SonarQube 網站網址為 http://localhost:9000/
- 這可以在
\conf\sonar.properties的WEB SERVER區段調整 - 若要讓非本機用戶使用,記得要再防火牆中開啟對外的 9000 埠
- 這可以在
- 網站預設管理員(參考)
- 帳號:admin
- 密碼:admin
測試
- 要分析 C# Code 我們要需要 SonarQube Scanner for MSBuild,我們下載回來之後解壓縮到我們自己指定的目錄。
- 參考下載及安裝段落
- 也可以將 Scanner 安裝其他開發者的機器裡機,讓開發者可以在自己的電腦上執行掃描
- 需修改
SonarQube.Analysis.xml檔案 sonar.host.urlSonarQube 伺服器位置sonar.login使用者帳號sonar.password使用者密碼
- 以下為執行掃描的指令(參考)
1 | # 建立掃描專案,會在目錄下新增 `.sonarqube` 資料夾 |
- 建立一個新的 WinForm 專案,跑測試,結果畫面如下

後記
可以正確的測試 C# 的專案,但遇到使用 ASP.NET Core 當框架的專案時,無法完成程式碼掃描,這裡說,可能是因為專案檔格式的變更,所以暫無法使用 SonarQube 進行測試。
參考資料: