SonarQube 提供了一個很好的方式來幫助我們檢查程式碼的品質,但有時候可能會遇到一些特定的規則並不適用於我們的專案,這時候可以透過設定來忽略這些特定的規則,這篇文章將會介紹如何在 CI 流程中忽略 SonarQube 的特定分析規則。
由於是要針對特定專案做規則忽略,因此我們不是要在 SonarQube 平台中來關閉分析規則,而是要在專案的分析設定檔中下手,有兩個切入點可以做這樣的設定,一個是使用 sonar-project.properties
的設定檔,一個是在 SonarQube 平台中,針對該專案做設定。
透過 sonar-project.properties 設定檔
我們可以在專案中加入 sonar-project.properties
設定檔,然後再設定檔中加入 Analysis Parameters,也就是我們要設定的設定值,下面範例就是用來來忽略特定的分析規則:
# Ignore Issues
sonar.issue.ignore.multicriteria=e1
# Skip Rule: Mark members as static
sonar.issue.ignore.multicriteria.e1.ruleKey=roslyn:CA1822
sonar.issue.ignore.multicriteria.e1.resourceKey=**/*.cs
這裡我們定義了一個名為 e1
的忽略規則,ruleKey
設定成忽略 roslyn:CA1822
這個分析規則,並且在 resourceKey
中設定只針對專案資料夾中所有 .cs
的檔案做忽略。
如果想要增加多個規則,可以再加入 e2
、e3
…等等,然後在 sonar.issue.ignore.multicriteria
中加入這些規則,寫法如下:
# Ignore Issues
sonar.issue.ignore.multicriteria=e1,e2
# Skip Rule: Mark members as static
sonar.issue.ignore.multicriteria.e1.ruleKey=roslyn:CA1822
sonar.issue.ignore.multicriteria.e1.resourceKey=**/*.cs
# Skip Rule: Prefer 'AsSpan' over 'Substring'
sonar.issue.ignore.multicriteria.e2.ruleKey=roslyn:CA1846
sonar.issue.ignore.multicriteria.e2.resourceKey=**/*.cs
這裡我們定義了兩個忽略規則,至於 ruleKey
的 Identifier 值要從哪裡查到,最簡單的方式就是在 SonarQube 平台中找,如下圖:
或是在已經分析過的專案中,點擊 Why is this an issue?
連結,接著會出現該規則的詳細資訊,右上角就會有 ruleKey
的 Identifier 值,如下圖:
直接在 CI 上設定
上述提到的透過 sonar-project.properties
設定檔來設定,讓你可以將設定值提交到你的版本庫中,而同樣的設定值,其實也可以直接在 CI 上面做設定,這裡以 Azure DevOps 為例,透過 Azure DevOps 的 Pipeline 設定,可以在 Prepare analysis on SonarQube
這個步驟中,加入 Additional Properties
來設定,如下圖:
從 SonarQube 平台中設定
我們也可以透過 SonarQube 平台中的專案設定來設定,在 Project Settings
> General Settings
中,有一個 Analysis Scope
的設定頁面,裡面的 Ignore Issues on Multiple Criteria
段落,可以在這裡設定要排除的規則,這樣的設定會直接影響到該專案的分析結果,如下圖:
參考資料: