安装 SonarQube 服务
- SaaS 版本可以直接使用,此处略过不谈;
- 通过 docker 运行 Server 版本或部署到虚拟机的方式请参考官方文档;
- 部署 Server 版本到 Azure APP Service 可以使用部署脚本或按以下步骤操作
- 新建 APP Service,在配置中选择 Java 运行时,启用 Websocket 和始终可用(Always On);
- 在产品页面点击 download 下载 zip 包;
- 通过高级工具(kudu)- Tools - Zip Push Deploy 将 zip 包部署至 wwwroot 路径;
- 在 APP Service 控制台中运行启动脚本,Windows 系统使用 sonarqube-8.0/windows-x86-64/StartSonar.bat,Linux 系统使用 sonarqube-8.0/linux-x86-64/sonar.sh
- 5-10 分钟后即可通过 APP Service 地址访问 SonarQube 服务,默认账号密码为 admin, admin
安装 SonarQube 扩展
进入扩展市场
搜索并安装 SonarQube
安装成功后可以在组织设置 - 扩展中看到
在 Azure Pipeline 中引入 SonarQube
连接 Azure DevOps 与 SonarQube 请参考这篇教程
SonarQube 提供了一个 Publish Quality Gate Result 任务,用于在扫描后等待接收扫描结果。
不建议添加该任务,会拖长 Pipeline 运行时间,返回的信息极少且无法根据结果影响 Pipeline 运行结果。
# .NET 项目
- task: SonarQubePrepare@4
inputs:
SonarQube: $(SonarQubeConnectionName)
scannerMode: 'MSBuild'
projectKey: $(projectName)
projectName: $(projectName)
- task: MSBuild@1
... # 此处省略
- task: SonarQubeAnalyze@4
# Maven 项目(Gradle 项目类似)
- task: SonarQubePrepare@4
inputs:
SonarQube: $(SonarQubeConnectionName)
scannerMode: 'Other'
extraProperties: |
sonar.projectKey=$(projectName)
sonar.projectName=$(projectName)
- task: Maven@3
inputs:
... # 此处省略
sonarQubeRunAnalysis: true
sqMavenPluginVersionChoice: 'latest'
# 其他项目类型
- task: SonarQubePrepare@4
inputs:
SonarQube: $(SonarQubeConnectionName)
scannerMode: 'CLI'
configMode: 'manual'
cliProjectKey: $(projectName)
cliProjectName: $(projectName)
extraProperties: 'sonar.inclusions=src/**/*'
- task: SonarQubeAnalyze@4
# 不建议使用的 Publish Quality Gate Result 任务
- task: SonarQubePublish@4
inputs:
pollingTimeoutSec: '1200'
扫描结果解析
打开 SonarQube 服务器地址并登录,在首页上即可看到所有扫描过的项目,及其扫描结果汇总。
点击项目标题进入项目详情,可以看到更全面的汇总信息,包括扫描所使用的规则(Quality Profiles)和及格线(Quality Gate)。
在 Issues 标签中,可以看到该项目中的所有代码缺陷,在左侧可以根据缺陷类型、严重性、程序语言和规则进行筛选。
点击右侧的一条缺陷记录,可以查看代码所处的文件和位置。
点击缺陷说明末尾的 See Rule 可以打开规则说明,查看这一条规则的说明以及建议的修复方式。