Sonar 扫描最佳实践

本文主要介绍如何在 Zadig 平台上,利用不同的扫描工具执行 Sonar 代码扫描,从而提高软件开发的效率和质量。通过详细的操作示例和配置说明,读者将了解到在 Zadig 上如何配置和使用 Maven、Gradle 以及 SonarScanner 等工具进行代码扫描的过程,为项目的质量控制提供了有力支持。此外,本文还探讨了 Zadig 代码扫描的进阶使用方法,如代码变更触发、开启质量门禁以及代码扫描模板的应用,旨在帮助开发团队更好地利用 Zadig 平台实现代码质量管理的自动化和规范化。

准备工作

在 Zadig 使用代码扫描需先集成 Sonar Server,具体方式参考文档

sonar-practice

下面通过具体例子详细介绍不同的 Sonar 扫描工具如何在 Zadig 上配置和使用。

不同 Sonar 扫描工具的使用

根据 Sonar 的官方说明,不同语言的 sonar 分析过程、内容和产生的分析结果各异。部分语言比如 JAVA、C# 等需针对编译后的文件 .class 、.dll 等进行分析,所以采用的扫描工具存在差异,一般 JAVA 使用 maven 来做 sonar 扫描;而 Gradle 项目可直接使用 gradle 做代码扫描,更为便捷;其他语言可以采用 SonarScanner CLI 执行扫描过程,Zadig 对此作了深度集成,无需额外下载、设置和维护 SonarScanner CLI ,减少工具本身的维护和管理负担。此外,Zadig集中管理 Sonar Server 地址和 Token 信息,在执行代码扫描时自动注入,无需额外配置,减轻管理负担,同时提升安全性。

Maven

以 Spring Boot 项目为例,介绍在 Zadig 上如何配置和使用 Maven 进行代码扫描,项目源码参考:spring-boot-demoSonar 扫描最佳实践 - 图2 (opens new window)

sonar-practice

配置说明:

  • 扫描环境:基础运行环境
  • 依赖的软件包:选择对应版本的 JAVA 和 Maven,软件包的管理参考文档
  • Sonar 地址:选择集成的 Sonar Server 地址
  • 代码信息:项目源码仓库地址
  • 扫描脚本:
  1. #!/bin/bash
  2. set -e
  3. cd $WORKSPACE/zadig/examples/spring-boot-demo
  4. mvn clean verify sonar:sonar -Dsonar.projectKey=$PROJECT -Dsonar.projectName=$PROJECT -Dsonar.host.url=$SONAR_URL

其中:

  • $PROJECT:当前项目标识
  • $SONAR_URL:Sonar Server 地址

Gradle

以 Gradle 项目为例,介绍在 Zadig 上如何配置和使用 Gradle 构建工具进行代码扫描,项目源码参考:sonarqube-scanner-gradleSonar 扫描最佳实践 - 图4 (opens new window)

sonar-practice

配置说明:

  • 扫描环境:基础运行环境,可选择官方的 sonar 镜像,也可自定义镜像(必须包含 Java)
  • Sonar 地址:选择集成的 Sonar Server 地址
  • 代码信息:项目源码仓库地址
  • 扫描脚本:
  1. #!/bin/bash
  2. set -e
  3. cd zadig/examples/sonarqube-scanner-gradle
  4. ./gradlew -Dsonar.host.url=$SONAR_URL sonar

其中:

  • $SONAR_URL:Sonar Server 地址

SonarScanner

以 Go 项目为例,介绍在 Zadig 如何使用 Sonar Scanner CLI 进行代码扫描,项目源码参考:multi-service-demoSonar 扫描最佳实践 - 图6 (opens new window)

Sonar 扫描最佳实践 - 图7 Sonar 扫描最佳实践 - 图8

配置说明:

  • 扫描环境:基础运行环境,可选择官方提供的 sonar 镜像;也可自定义镜像(必须包含 Java 和 sonar-scanner)
  • Sonar 地址:选择集成的 Sonar Server 地址
  • 代码信息:项目源码仓库地址
  • SonarScanner 扫描:添加步骤填写 sonar 扫描参数,例如:
  1. # Sonar Parameter
  2. sonar.projectKey=multi-service-demo
  3. sonar.projectName=multi-service-demo
  4. sonar.sources=./examples/multi-service-demo
  5. sonar.go.file.suffies=.go

进阶使用

代码变更触发

开发人员完成代码编写后,通常希望及时获得代码质量反馈。Zadig 支持代码变更自动触发执行代码扫描,并将结果反馈到代码的 MR/PR 上,为代码审核提供客观依据。

  • 配置触发器:编辑代码扫描 > 添加代码变更触发器。

sonar-practice

  • 效果展示:在 GitLab 上提交代码,创建 Merge Request,自动触发代码扫描,并在 MR 上获得扫描结果。

Sonar 扫描最佳实践 - 图10 Sonar 扫描最佳实践 - 图11

开启质量门禁

通过设置质量门禁,可以在提交代码前对其进行严格的质量检查,以确保它符合预先定义的质量标准和规范。这样做有助于提高代码质量,减少技术债。SonarQube 支持为项目设置这样的质量门禁规则,在 Zadig 中开启”质量门禁检查”后,系统会应用 Sonar 上的质量门禁规则。如果扫描任务满足了规则条件,则任务通过;如果不满足条件,则任务失败。

Sonar 扫描最佳实践 - 图12 Sonar 扫描最佳实践 - 图13 Sonar 扫描最佳实践 - 图14

代码扫描模板

对于有多个代码仓库且扫描过程相似的情况,单独管理每个代码库的扫描过程会增加维护负担。为了减轻这种负担,Zadig 提供了代码扫描模板的功能,允许多个代码库共享同一份模板。这样,当扫描过程需要更新时,只需修改模板,关联的所有代码库的扫描过程就会同步更新,大大减少了维护的工作。

  • 配置模板:模板库 > 添加并配置代码扫描模板。

sonar-practice

  • 使用模板:新建代码扫描 > 选择「使用模板」并选择模板 > 填写代码信息。

sonar-practice