[實作筆記] SonarCloud with .NET 6.0.x

前情提要

承上篇,在升級了 .NET 6.0.x 後發現,
SonarCloud 的測試含概率不知何時變成 0 ,
相對應的 Code Smell 也沒有作檢查, 加上原本的 github/workflow 並沒特別分門別類,
所以真正的錯誤原因已經不可考, 修復 SonarCloud 的過程中特別撰文記錄.

實作

第一件事是在升級 .NET 6.0 後, 試著在本地環境上執行檢查並上傳到 SonarCloud.

前置條件

本機的執行步驟

  • dotnet sonarscanner begin

    1
    2
    3
    4
    5
    6
    7
    dotnet sonarscanner begin \
    /o:"marsen-github" \
    /k:"Marsen.NetCore.Dojo" \
    /n:"Marsen.NetCore.Dojo" \
    /d:sonar.host.url="https://sonarcloud.io" \
    /d:sonar.cs.opencover.reportsPaths="./test/_/TestResults/_/coverage.opencover.xml" \
    /d:sonar.login="****"

    參數說明
    /o: Organization Key
    /k: Project Key
    /n: Project Name
    /d:sonar.host.url: sonar server url
    /d:sonar.cs.opencover.reportsPaths: OpenCover coverage report
    /d:sonar.login: 登入 sonar server 的 token

  • dotnet build

    1
    dotnet build Marsen.NetCore.Dojo.sln
  • dotnet test

    1
    2
    3
    dotnet test Marsen.NetCore.Dojo.sln \
    --logger trx --collect:"XPlat Code Coverage" \
    -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=opencover
  • dotnet sonarscanner end

    1
    dotnet-sonarscanner end /d:sonar.login="****"

Github Workflow 的設定

目前並沒有官方的解決方案 ,
我們使用 SonarScanner for .NET 來執行 workflow ,
這個專案十分簡潔,可以快速看一下內容,了解到怎麼實作一個 workflow ,
因為非官方解決方案,所以我 fork 這個方案避免意外發生.

而在 workflow 中設定的也是使用 fork 的方案
設定參考如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- name: SonarCloud Scan
uses: marsen/[email protected]
with:
# The key of the SonarQube project
sonarProjectKey: Marsen.NetCore.Dojo
# The name of the SonarQube project
sonarProjectName: Marsen.NetCore.Dojo
# The name of the SonarQube Organization
sonarOrganization: marsen-github
# Optional extra command arguments the the SonarScanner 'begin' command
sonarBeginArguments: /d:sonar.cs.opencover.reportsPaths="./test/*/TestResults/*/coverage.opencover.xml"
# Optional. Set to 1 or true to not run 'dotnet test' command
# dotnetDisableTests: true
dotnetTestArguments: Marsen.NetCore.Dojo.Integration.Test.sln --logger trx -p:CoverletOutputFormat="opencover" --collect:"XPlat Code Coverage" -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=opencover
dotnetBuildArguments: Marsen.NetCore.Dojo.sln

其它

注意到 opencover 的開發者已經不再維護(2021 年 6 月),並建議使用 AltCover.
但是 sonarcloud 並未支援 altcover 的報表, 這裡有相關的 issue 追蹤中.

參考

(fin)

Please enable JavaScript to view the Gitalk. :D
Please enable JavaScript to view the LikeCoin. :P
Please enable JavaScript to view the LikeCoin. :P