若對 SonarQube 在做什麼仍有疑問,可以參考以下文章哦!
簡單來說,執行 SonarQube 掃描有幾個前提條件:
這邊就不詳細描述怎麼去安裝了,因為不是本文重點...
以下已經假定你處理好前置作業提到的內容!
這邊會介紹兩種掃描做法(Local、Jenkins),其它做法基本大同小異,就自行變通囉!
以下均以 .NET 專案為例子!
藉由 Local 搭配 Sonar Scanner 觸發 SonarQube 掃描,有以下幾個步驟:
建立 SonarQube 專案
選擇執行方式
提供存取權杖(預設會以專案為範圍,來限縮存取能力)
初步了解待執行指令
安裝 dotnet-sonarscanner 後,回到專案根路徑執行後續步驟
dotnet tool install --global dotnet-sonarscanner
執行 begin 步驟
執行參數至少要有:
測試參數建議要有(其它細節可參考文件):
指令範例:
dotnet sonarscanner begin /k:<project-key> /v:<version> /d:sonar.host.url=<url> /d:sonar.login=<token> /d:sonar.cs.vscoveragexml.reportsPaths=**/*.coveragexml /d:sonar.verbose=false
執行 build、test 步驟
dotnet build --tl
# 基本就看你測試專案有幾個,理論就有幾列...
dotnet coverage collect "dotnet test test\Coverage.IntegrationTest\Coverage.IntegrationTest.csproj --logger trx;logfilename=testResults.trx" -f xml -o CoverageIntegration.coveragexml
dotnet coverage collect "dotnet test test\Coverage.UnitTest\Coverage.UnitTest.csproj --logger trx;logfilename=testResults.trx" -f xml -o CoverageUnit.coveragexml
執行 end 步驟(有 begin 就必須有 end)
…(訊息太長了,先跳過…)
執行參數至少要有:
指令範例:
dotnet sonarscanner end /d:sonar.login=<token>
看起來執行 SonarQube 掃描,分別要執行 3 個步驟,故可以寫一個腳本做這件事。
或許還有可以化簡的部分,就看各位發揮了!
腳本範例:
指令範例:
run-sonar-scanner.ps1 -BeginParams '/k:<project-key> /v:<version> /d:sonar.host.url=<url> /d:sonar.login=<token> /d:sonar.cs.vscoveragexml.reportsPaths=<path-pattern> /d:sonar.verbose=<bool>' -EndParams '/d:sonar.login=<token>' -MiddleCommands { <command1>; <command2>; <command3> }
藉由 Jenkins 搭配 Sonar Scanner 觸發 SonarQube 掃描,可以參考以下文章哦!
以過往經驗來看,大部分人對於 SonarQube 提供的報告可能不怎麼在意,因為它可能不是客戶用來評斷系統好壞的一種基準,客戶可能更傾向弱點掃描,但其實也沒有不對。
而工程師因應新需求,撰寫新程式碼再正常不過了。
但我們能不能再做得更好?
讓程式碼能夠具備可靠性、安全性、可維護性呢?
這都取決於你呀!
坐而言,不如起而行。