安装 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@4inputs:SonarQube: $(SonarQubeConnectionName)scannerMode: 'MSBuild'projectKey: $(projectName)projectName: $(projectName)- task: MSBuild@1... # 此处省略- task: SonarQubeAnalyze@4# Maven 项目(Gradle 项目类似)- task: SonarQubePrepare@4inputs:SonarQube: $(SonarQubeConnectionName)scannerMode: 'Other'extraProperties: |sonar.projectKey=$(projectName)sonar.projectName=$(projectName)- task: Maven@3inputs:... # 此处省略sonarQubeRunAnalysis: truesqMavenPluginVersionChoice: 'latest'# 其他项目类型- task: SonarQubePrepare@4inputs:SonarQube: $(SonarQubeConnectionName)scannerMode: 'CLI'configMode: 'manual'cliProjectKey: $(projectName)cliProjectName: $(projectName)extraProperties: 'sonar.inclusions=src/**/*'- task: SonarQubeAnalyze@4# 不建议使用的 Publish Quality Gate Result 任务- task: SonarQubePublish@4inputs:pollingTimeoutSec: '1200'
扫描结果解析
打开 SonarQube 服务器地址并登录,在首页上即可看到所有扫描过的项目,及其扫描结果汇总。
点击项目标题进入项目详情,可以看到更全面的汇总信息,包括扫描所使用的规则(Quality Profiles)和及格线(Quality Gate)。
在 Issues 标签中,可以看到该项目中的所有代码缺陷,在左侧可以根据缺陷类型、严重性、程序语言和规则进行筛选。
点击右侧的一条缺陷记录,可以查看代码所处的文件和位置。
点击缺陷说明末尾的 See Rule 可以打开规则说明,查看这一条规则的说明以及建议的修复方式。
