在 Erda 中使用 SonarQube

SonarQube(Sonar)是一个开源的代码质量管理系统,提供重复代码、编码标准、单元测试、代码覆盖率、代码复杂度、潜在 Bug、注释及软件设计报告。

本文旨在为您介绍如何在 Erda 项目中使用 Sonar,为应用提供一个代码质量管理系统。

准备工作

着手使用 Sonar 前,您需要对 Erda 有初步的了解。Erda 以 项目和应用 为中心展开一系列功能,因此请先创建一个 项目,并为该项目分配资源(具体请参见 资源配额)。

tip 提示 请确保分配的资源满足应用构建所需,避免因资源不足导致构建失败。具体请参见 资源配额

若您计划创建一个全新的项目,建议优先阅读以下文档:

  1. 项目和应用创建
  2. 项目资源管理

若您对如何管理项目资源存在疑问,建议优先阅读以下文档:

  1. 管理配额
  2. 节点标签

准备一个可用的 SonarQube 服务

首先您需要有一个可用的 SonarQube 服务,用于后续操作。您可以选择其他供应商提供的 SonarQube 服务,也可以选择自建服务。SonarQube 官方同样提供了 SaaS 服务的可选项,您可以在其 官网 快速获取一个可用的实例。

本章节为您罗列了几种常见的搭建方案。若您急于了解 Erda 如何与 SonarQube 并肩保障程序质量,此处另提供一种快速的方案,即“临时 Sonar 实例”。该方案借由 Erda 一键发布应用的能力,通过简单的 pipeline.yml 和 dice.yml 即可将 Sonar 作为一个应用快速弹起。

warning 警告

此类“临时 Sonar 实例”不可用于真实应用场景,仅供快速入门参考。

您可以根据实际需要,有选择性地阅读以下内容:

  1. SonarCloud
  2. 已有自建 Sonar 服务
  3. 临时 Sonar 实例(不可用于真实应用场景)

SonarCloud

SonarCloud 是由 Sonar 官方提供的代码检测平台,对开源项目免费提供,具体请参见 SonarCloud 官网

已有自建 Sonar 服务

自建 Sonar 服务可参考以下几种方式:

  1. 人工运维搭建 Sonar 服务,SonarQube 目前已开源,可前往 GitHub 下载安装。
  2. Docker 容器搭建 Sonar 服务 官方镜像
  3. 通过 Helm 在 K8s 集群搭建 Sonar 服务 Helm Chart

临时 Sonar 实例

新建应用

如需快速构建一个 Sonar 服务,请在项目下新建一个应用用于部署自建 Sonar,例如新建一个应用命名为 sonarqube(该示例仅供快速入门参考,不建议在生产环境中使用)。

在 Erda 中使用 SonarQube - 图1

完成应用创建后,需编写 pipeline.yml 和 dice.yml 以快速部署 Sonar 服务,其中 pipeline.yml 用于快速输出 SonarQube 服务制品(关于流水线更多信息,请参见 pipeline.yml),dice.yml 则以声明的方式运行服务(关于 dice.yml 更多信息,请参见 dice.yml)。

tip 提示 您也可以前往 GitHub 直接获取代码示例,免去从零调试的麻烦。

编写流水线

  1. version: "1.1"
  2. stages:
  3. - stage:
  4. - git-checkout:
  5. alias: git-checkout
  6. description: 代码仓库克隆
  7. - stage:
  8. - release:
  9. alias: release
  10. params:
  11. dice_yml: ${{ dirs.git-checkout }}/dice.yml
  12. - stage:
  13. - dice:
  14. alias: dice
  15. description: 用于 Erda 平台部署应用服务
  16. params:
  17. release_id: ${{ outputs.release.releaseID }}

编写 dice.yml

上文的流水线可成功输出制品,此时需用 dice.yml 描述 Sonar 的部署。

您可以前往 Sonar 官方 选择目标版本,随后替换 Image,或直接使用现成的 8.9.6 版本。

  1. version: '2.0'
  2. services:
  3. sonar:
  4. image: registry.cn-hangzhou.aliyuncs.com/dice-third-party/sonar:8.9.6
  5. ports:
  6. - port: 9000
  7. expose: true
  8. resources:
  9. cpu: 0.5
  10. mem: 2048
  11. deployments:
  12. replicas: 1

您可以根据需要自行修改 CPU 和内存资源。

执行流水线

完成 Sonar 版本选择及流水线编写后,执行流水线即可构建部署 SonarQube。

如需指定 Sonar 的管理员密码和 Token,可进入应用的 设置 > 环境部署 设置参数。

  • SONAR_ADMIN_PASSWORD:Sonar 的管理员密码

  • SONAR_ADMIN_TOKEN:Sonar 的管理员 Token

在 Erda 中使用 SonarQube - 图2

点击执行流水线,等待部署完成。

测试 Sonar

完成部署后,可进入部署中心点击 设置域名,开放 Sonar 服务。

在 Erda 中使用 SonarQube - 图3

前往该 Sonar 链接地址,即可看到一个全新的 Sonar 服务。

在 Erda 中使用 SonarQube - 图4

至此,您已完成一个自建的 SonarQube 服务。

在 SonarQube 中创建项目和授权凭证(Token)

完成服务创建后,请在 SonarQube 中新建一个项目和 Token,用于后续的应用代码检查。

在 Erda 中使用 SonarQube - 图5

如图所示,新建一个项目,随后为该项目新建一个 Token 密钥。具体请参见 Sonar 官方文档

在 Erda 中使用 SonarQube - 图6

开始为您的业务应用配置 Sonar

至此您已完成代码质量检查的所有前置条件。请选择需代码检查的应用,进入该应用的 设置 > Sonar 设置 配置 Sonar 信息。

在 Erda 中使用 SonarQube - 图7

完成 Sonar 信息配置后,进入应用新建流水线,选择 Sonar Action (2.0)并执行即可使用 Sonar 服务。

流水线示例如下:

  1. version: "1.1"
  2. stages:
  3. - stage:
  4. - git-checkout:
  5. alias: git-checkout
  6. version: "1.0"
  7. params:
  8. branch: master
  9. depth: 1
  10. - stage:
  11. - sonar:
  12. alias: sonar
  13. version: "2.0"
  14. params:
  15. # 这里指定了sonar分析的应用代码
  16. code_dir: ${{ dirs.git-checkout }}
  17. # 默认不需要代码检查为ok
  18. must_gate_status_ok: false

tip 提示

  • 通常情况下,仅在代码门禁检查状态为 OK 时允许流水线后续的打包部署等操作。此时可将参数 must_gate_status_ok 设为 true,即为强制要求代码质量检查通过。关于代码门禁检查更多信息,请参见 官网文档
  • 使用 Sonar Action 时请选择 2.0 版本以支持自定义 SonarQube 服务。若未指定版本,则默认为 1.0 版本(具体请参见 代码质量)。

执行成功后,Sonar Action 将返回 Sonar 项目的链接地址。

在 Erda 中使用 SonarQube - 图8

打开该链接地址即可进入 Sonar 查看具体的代码质量报告。

查看应用的代码质量报告

成功执行流水线后,Sonar Action 将返回您的应用在 Sonar 服务的链接地址,打开该链接即可查看应用的质量报告。

在 Erda 中使用 SonarQube - 图9

代码质量报告包含以下内容:

  • 漏洞
  • 代码异味
  • 覆盖率
  • 重复代码
  • 其它

任意一项可区分每次扫描新增的数量。Sonar 质量报告从可靠性、安全性、可维护性、覆盖率、重复率等多方面对项目进行分析,并从 A~E 划分为 5 个风险等级,有助于您严格把关代码工程的质量。更多信息请参见 官方文档