安装 SonarQube 服务

  1. SaaS 版本可以直接使用,此处略过不谈;
  2. 通过 docker 运行 Server 版本或部署到虚拟机的方式请参考官方文档
  3. 部署 Server 版本到 Azure APP Service 可以使用部署脚本或按以下步骤操作
    1. 新建 APP Service,在配置中选择 Java 运行时,启用 Websocket 和始终可用(Always On);
    2. 在产品页面点击 download 下载 zip 包;
    3. 通过高级工具(kudu)- Tools - Zip Push Deploy 将 zip 包部署至 wwwroot 路径;
    4. 在 APP Service 控制台中运行启动脚本,Windows 系统使用 sonarqube-8.0/windows-x86-64/StartSonar.bat,Linux 系统使用 sonarqube-8.0/linux-x86-64/sonar.sh
    5. 5-10 分钟后即可通过 APP Service 地址访问 SonarQube 服务,默认账号密码为 admin, admin

安装 SonarQube 扩展

进入扩展市场
image.png
搜索并安装 SonarQube
image.png
安装成功后可以在组织设置 - 扩展中看到
image.png

在 Azure Pipeline 中引入 SonarQube

连接 Azure DevOps 与 SonarQube 请参考这篇教程
SonarQube 提供了一个 Publish Quality Gate Result 任务,用于在扫描后等待接收扫描结果。
不建议添加该任务,会拖长 Pipeline 运行时间,返回的信息极少且无法根据结果影响 Pipeline 运行结果。

  1. # .NET 项目
  2. - task: SonarQubePrepare@4
  3. inputs:
  4. SonarQube: $(SonarQubeConnectionName)
  5. scannerMode: 'MSBuild'
  6. projectKey: $(projectName)
  7. projectName: $(projectName)
  8. - task: MSBuild@1
  9. ... # 此处省略
  10. - task: SonarQubeAnalyze@4
  11. # Maven 项目(Gradle 项目类似)
  12. - task: SonarQubePrepare@4
  13. inputs:
  14. SonarQube: $(SonarQubeConnectionName)
  15. scannerMode: 'Other'
  16. extraProperties: |
  17. sonar.projectKey=$(projectName)
  18. sonar.projectName=$(projectName)
  19. - task: Maven@3
  20. inputs:
  21. ... # 此处省略
  22. sonarQubeRunAnalysis: true
  23. sqMavenPluginVersionChoice: 'latest'
  24. # 其他项目类型
  25. - task: SonarQubePrepare@4
  26. inputs:
  27. SonarQube: $(SonarQubeConnectionName)
  28. scannerMode: 'CLI'
  29. configMode: 'manual'
  30. cliProjectKey: $(projectName)
  31. cliProjectName: $(projectName)
  32. extraProperties: 'sonar.inclusions=src/**/*'
  33. - task: SonarQubeAnalyze@4
  34. # 不建议使用的 Publish Quality Gate Result 任务
  35. - task: SonarQubePublish@4
  36. inputs:
  37. pollingTimeoutSec: '1200'

扫描结果解析

打开 SonarQube 服务器地址并登录,在首页上即可看到所有扫描过的项目,及其扫描结果汇总。
image.png
点击项目标题进入项目详情,可以看到更全面的汇总信息,包括扫描所使用的规则(Quality Profiles)和及格线(Quality Gate)。
image.png
在 Issues 标签中,可以看到该项目中的所有代码缺陷,在左侧可以根据缺陷类型、严重性、程序语言和规则进行筛选。
image.png
点击右侧的一条缺陷记录,可以查看代码所处的文件和位置。
image.png
点击缺陷说明末尾的 See Rule 可以打开规则说明,查看这一条规则的说明以及建议的修复方式。
image.png

在 SonarQube 中配置用户权限

在 SonarQube 中配置代码及格线

在 SonarQube 中自定义扫描规则