本文根据 Qiita 原文,整理如何使用 SonarQube Server(SQS)自动分析 Azure DevOps(ADO)的 Pull Request。目标是在创建 PR 时执行 SAST,并将分析结果反馈到 PR。

连接 SonarQube 与 Azure DevOps

集成需要 ADO URL 和 Personal Access Token(PAT)。在 SonarQube 中基于 ADO 仓库创建项目,并在 SonarQube 侧注册 ADO 集成。

SonarQube 与 Azure DevOps 集成设置

Azure DevOps PAT 设置

基于 ADO 仓库创建 SonarQube 项目

配置 Azure DevOps

在 ADO 中安装 SonarQube 应用,并创建连接到 SonarQube 的 Service Connection。随后使用该连接配置 Pipeline。原文的示例会分析 PR 和 master 分支:

在 Azure DevOps 中添加 SonarQube 应用

SonarQube 应用设置

创建 Service Connection

配置 Service Connection

创建 Azure DevOps Pipeline

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
trigger:
- master

pr:
- '*'

pool:
  vmImage: ubuntu-latest

steps:
- checkout: self
  fetchDepth: 0
- task: SonarQubePrepare@8
  inputs:
    SonarQube: 'SonarQubeNgrok'
    scannerMode: 'cli'
    configMode: 'manual'
    cliProjectKey: 'wenhan-Sonar_xxxxx'
    cliSources: '.'
- task: SonarQubeAnalyze@8
  inputs:
    jdkversion: 'JAVA_HOME_21_X64'
- task: SonarQubePublish@8
  inputs:
    pollingTimeoutSec: '300'

SonarQube Pipeline 配置

将 SonarQube 设置为已创建的 Service Connection 名称,并把 cliProjectKey 替换为 SQS 项目键。

配置 Branch Policy 并验证 PR

在 ADO 的 Branch Policy 中将目标 Pipeline 设置为必需检查。修改示例代码并创建 PR,确认 Pipeline 的分析结果已发送到 SonarQube,并且 PR 中可以看到 Quality Gate 结果和 Issue 详情。

将 Pipeline 添加到 Branch Policy

Branch Policy 配置结果

Pipeline 分析结果

PR 中显示的 Quality Gate 和 Issue

PR 中的分析反馈

完成配置后,每个 PR 都可以自动运行分析并展示结果。