利用SonarCloud和Azure DevOps提升程式碼質量

初久的私房菜發表於2024-07-02

利用SonarCloud和Azure DevOps提升程式碼質量

在軟體開發過程中,程式碼質量是至關重要的。為了確保程式碼的清潔和安全性,我們可以使用SonarCloud——一個基於雲的程式碼質量與安全服務。SonarCloud不僅對開源專案免費,還為私有專案提供了14天的免費試用。本文將指導您如何將SonarCloud整合到Azure DevOps服務中,以實現程式碼質量的持續提升。

為什麼選擇SonarCloud?

SonarCloud支援26種程式語言,包括Java、JavaScript、C#、C/C++等,並且擁有超過5000條規則來幫助您追蹤難以發現的bug和質量問題。它還提供了雲CI整合,支援Travis、Azure DevOps、BitBucket、AppVeyor等多種持續整合工具。

整合步驟概覽

  • 建立一個新的Azure DevOps專案,例如名為“SonarExamples”的專案。

  • 安裝SonarCloud Azure DevOps擴充套件,它包含構建任務、構建模板和自定義儀表板小部件。

  • 使用相同的賬戶登入SonarCloud,建立組織和專案,確保它們與Azure DevOps中的設定相匹配。

  • 在Azure中建立Personal Access Token (PAT),並將其應用於SonarCloud,以便SonarCloud能夠向Azure DevOps的拉取請求新增評論。

  • 配置Azure DevOps中的分支策略,以便在建立針對特定分支的拉取請求時觸發SonarCloud分析。

詳細步驟

步驟1:建立並應用PAT到SonarCloud

首先,您需要在Azure DevOps中建立一個PAT,並將其應用於SonarCloud。確保PAT的範圍設定為“程式碼”下的“讀取和寫入”。

步驟2:配置分支策略

在Azure DevOps中,配置分支策略以確保當任何拉取請求針對主分支時,都會觸發SonarCloud分析。

步驟3:建立拉取請求並觸發分析

在Azure DevOps中,對程式碼檔案進行更改並建立新的拉取請求。如果整合配置正確,使用者介面將顯示正在進行的分析構建。

步驟4:審查拉取請求分析結果

分析完成後,您可以在Azure DevOps的構建摘要中檢視分析報告的摘要,或者直接在SonarCloud中檢視專案的分析結果。

步驟5:阻止不合格的程式碼合併

您可以配置Azure DevOps以阻止拉取請求合併,除非SonarCloud的質量門檢查透過。

YAML


# .NET Desktop
# Build and run tests for .NET Desktop or Windows classic desktop solutions.
# Add steps that publish symbols, save build artifacts, and more:
# https://docs.microsoft.com/azure/devops/pipelines/apps/windows/dot-net

trigger:
- master

pool:
  vmImage: 'windows-latest'

variables:
  solution: 'sonar-scanner-msbuild/CSharpProject/*.sln'
  buildPlatform: 'Any CPU'
  buildConfiguration: 'Release'

steps:
- checkout: self
  fetchDepth: 0

- task: NuGetToolInstaller@1

- task: NuGetCommand@2
  inputs:
    restoreSolution: '$(solution)'

- task: SonarCloudPrepare@2
  inputs:
    SonarCloud: 'SonarCloud'
    organization: 'fiayuifzrtlyudavoccb5hf5pdveliwhmozcaheibqtjoogbywuq'
    scannerMode: 'MSBuild'
    projectKey: 'PrivateProgram_SonarExamples'
    projectName: 'SonarExamples'

- task: VSBuild@1
  inputs:
    solution: '$(solution)'
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

- task: VSTest@2
  inputs:
    platform: '$(buildPlatform)'
    configuration: '$(buildConfiguration)'

# Run Code Analysis task
- task: SonarQubeAnalyze@6

# Publish Quality Gate Result task
- task: SonarQubePublish@6
  inputs:
    pollingTimeoutSec: '300'

結果

透過將SonarCloud整合到Azure DevOps的CI/CD流程中,您可以自動化技術債務的測量,包括程式碼語義、測試覆蓋率、漏洞等,並在問題合併之前發現它們。這不僅提高了程式碼質量,還加快了開發週期。

相關文章