利用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流程中,您可以自動化技術債務的測量,包括程式碼語義、測試覆蓋率、漏洞等,並在問題合併之前發現它們。這不僅提高了程式碼質量,還加快了開發週期。