通過 SonarQube 進行 C# 程式碼品質分析

SonarQube 是一套程式碼品質分析工具,分析程式是否存在 Bug、漏洞或不好的寫法,第一關品質分析就交給它了,它的運作方式很簡單,透過 SonarQube Scanner 把報告提交到 SonarQube Server,這篇我會用 .NET Core 的專案實驗。
下圖出自官網 https://docs.sonarsource.com/sonarqube-server/latest/setup-and-upgrade/install-the-server/introduction/


 

開發環境

  • Windows 11 Home
  • .NET 8
  • SonarQube:9.9.8-community
  • Postgres:17.2
  • Rider 2024.3.2

安裝 SonarQube Server

version: "3"

services:
  sonarqube:
    image: sonarqube:9.9.8-community
    depends_on:
      - db
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
    networks:
      - sonarQubeNet
    volumes:
      - ./sonarqube_data:/opt/sonarqube/data
      - ./sonarqube_conf:/opt/sonarqube/conf
    expose:
      - 9000
    ports:
      - 9000:9000
  db:
    image: postgres:17.2
    ports:
      - 5432:5432
    networks:
      - sonarQubeNet
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
    volumes:
      - ./postgresql:/var/lib/postgresql
      - ./postgresql_data:/var/lib/postgresql/data
networks:
  sonarQubeNet:
    driver: bridge

volumes:
  sonarqube_conf:
  sonarqube_data:
  sonarqube_extensions:
  sonarqube_bundled-plugins:
  postgresql:
  postgresql_data:

 

啟動容器

docker compose up -d

訪問 http://localhost:9000/

  • 帳號:admin
  • 密碼:admin

登入後變更密碼。

新增專案

 

 

 

建立 token

 

這時候會產生一組 Token,保管好,不要外洩。

 

安裝 SonarScanner

切到專案資料夾,依序執行以下指令

安裝全域工具

dotnet tool install --global dotnet-sonarscanner

 

若沒有 JDK,執行以下

scoop install openjdk23

 

產生報告並上傳到 SonarQube

dotnet sonarscanner begin /k:"demo" /d:sonar.host.url="http://localhost:9000"  /d:sonar.login="sqp_989aa34c1a7eeb90dad367511382488922bd8607"
dotnet build
dotnet sonarscanner end /d:sonar.login="sqp_989aa34c1a7eeb90dad367511382488922bd8607"

 

 

報告內容如下:

 

SonarQube for IDE

除了用 SonarScanner 提交報告之外,Rider 也可以用 SonarQube for IDE

Rider:SonarQube for IDE - IntelliJ IDEs Plugin | Marketplace

安裝好之後,就會自動診斷,根據他跳出來的訊息就可以逐一處理

SonarQube for IDE 可以連接 SonarQube Server,不過使用起來的感覺沒有太大的差異,更多的操作請參考

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo