選單
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
4 分鐘閱讀時間 (733 個字)

SonarQube 小試身手

Photo by Hello I'm Nik on Unsplash Photo by Hello I'm Nik on Unsplash

若對 SonarQube 在做什麼仍有疑問,可以參考以下文章哦!

改善程式碼品質從 SonarQube 開始!

前置作業

簡單來說,執行 SonarQube 掃描有幾個前提條件:

  1. Server 端要部署 SonarQube
    部署方式可以是 Local、Docker … 等等,可參考文件
  2. Client 端要使用 Sonar Scanner
    Client 端可以是 Local、Docker … 等等,可參考文件

這邊就不詳細描述怎麼去安裝了,因為不是本文重點...

掃描執行

以下已經假定你處理好前置作業提到的內容!

這邊會介紹兩種掃描做法(Local、Jenkins),其它做法基本大同小異,就自行變通囉!

以下均以 .NET 專案為例子!

Local

藉由 Local 搭配 Sonar Scanner 觸發 SonarQube 掃描,有以下幾個步驟:

介面設定

建立 SonarQube 專案

1

選擇執行方式

2

提供存取權杖(預設會以專案為範圍,來限縮存取能力)

3

初步了解待執行指令

4

實際執行

安裝 dotnet-sonarscanner 後,回到專案根路徑執行後續步驟

dotnet tool install --global dotnet-sonarscanner

執行 begin 步驟

5

執行參數至少要有:

  • /k:<project-key>:指定 SonarQube 專案
  • /v:<version>:指定版本(利於後續 SonarQube 可以進行版本比較)
  • /d:sonar.host.url=<url>:指定 SonarQube 服務位址
  • /d:sonar.login=<token> 或較新版本的 /d:sonar.token=<token>:指定 SonarQube 服務存取權杖
  • /d:sonar.verbose=<bool>:是否顯示較完整的執行訊息

測試參數建議要有(其它細節可參考文件):

  • /d:sonar.cs.vscoveragexml.reportsPaths=<path-pattern>:指定程式碼涵蓋範圍結果報告路徑

指令範例:

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

執行 buildtest 步驟

6

dotnet build --tl

6 1

# 基本就看你測試專案有幾個,理論就有幾列...
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

7

…(訊息太長了,先跳過…)

8

執行參數至少要有:

  • /d:sonar.login=<token> 或較新版本的 /d:sonar.token=<token>:指定 SonarQube 服務存取權杖

指令範例:

dotnet sonarscanner end /d:sonar.login=<token>

檢視結果

9

10

延伸

看起來執行 SonarQube 掃描,分別要執行 3 個步驟,故可以寫一個腳本做這件事。

或許還有可以化簡的部分,就看各位發揮了!

腳本範例:

13

指令範例:

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

藉由 Jenkins 搭配 Sonar Scanner 觸發 SonarQube 掃描,可以參考以下文章哦!

為什麼程式需要單元測試? - 視覺化篇

總結

以過往經驗來看,大部分人對於 SonarQube 提供的報告可能不怎麼在意,因為它可能不是客戶用來評斷系統好壞的一種基準,客戶可能更傾向弱點掃描,但其實也沒有不對。

而工程師因應新需求,撰寫新程式碼再正常不過了。

但我們能不能再做得更好?

讓程式碼能夠具備可靠性、安全性、可維護性呢?

這都取決於你呀!

坐而言,不如起而行。

使用 Cypress 的經驗分享
Exit Code 139

相關文章

 

評論

尚無評論
已經注冊了? 這裡登入
Guest
2025/06/09, 週一

Captcha 圖像