Sonarqube系列02:深入理解Sonarqube工作原理及概念
在开始具体代码的质量分析之前,还需要理解 Sonarqube 的工作流程才能更好的使用它。在这章内容中将详细介绍它的工作原理以及理解所需的概念。
1. 工作原理
1.1. 系统组件图
Sonarqube 实例包括三个组件:
- Sonarqube server 提供质量管理服务,主要包括:
- Web Server 用来提供用户界面
- Search Server 基于 ES 的搜索服务
- Compute Engine 负责处理代码分析报告,并将其保存在数据库中的计算引擎
- Database Server 存储数据:
- 代码扫描期间生成的代码质量和安全性指标和问题
- Sonarqube 实例配置 (规则、质量阀、用户、权限、项目等)
- Scanner 扫描分析代码问题
1.2. 理解要点
下面是一些理解要点,可以帮助你更好的理解 Sonarqube 是如何工作的。
- 具备扫描能力的是 Scanner,Scanner 通过 HTTP/HTTPS 协议获取 Sonarqube Server 配置的审查规则,在本地进行代码扫描并生成分析报告,然后将报告上传至 Sonarqube Server 计算。
- Sonarqube Server 接收到报告后进行报告解析,汇聚成各个维度的分析数据生成一个 Snapshot 并存储,用户可以通过 Web 界面查看对应的代码审查 Snapshot。
- Sonarqube 提供多种形式的 Scanner 便于不同语言开发者使用,包括 1 个通用的 CLI 工具: SonarScanner,以及匹配不同 CI 工具、语言的适配版本(Gradle、. NET、Maven、Jenkins、Azure DevOps、Ant 等)。
- 基于要点 1,可以使用三方代码分析工具进行分析并将其报告转换成 Sonarqube 报告格式,再通过 SonarScanner 上传,实现整合三方工具结果。
- Scanner 提供了丰富的参数定制分析过程满足个性化需求,例如如下几个场景:
sonar.qualitygate.wait=true
实现 Scanner 等待 Sonarqube Server 返回质量阀比对结果sonar.externalIssuesReportPaths
指定待三方报告路径sonar.exclusions
排除待检查的目录
2. 概念
在工作原理介绍中使用了一些概念术语,在 Sonarqube 的使用过程中需要理解这些关键性概念。
2.1. 核心概念
概念 | 说明 |
---|---|
Bug | 错误,指代码中出现的错误,可靠性维度 |
Vulnerability | 漏洞,指代码中出现的后门,安全维度 |
Code Smell | 代码异味,指使维护人员修改代码更加困难的用法实现,可维护性维度 |
Security Hotspot | 安全热点,指需要人工复审确认是否存在安全风险,安全维度 |
Technical Debt | 技术债务,指修复所有「Code Smell」所需的预估时间 |
Remediation Cost | 修复成本,指修复「Bug」「Vulnerability」问题所需的预估时间 |
Rule | 代码规则,应遵循的编码标准或实践。不遵守编码规则会导致错误、漏洞、安全热点和代码异味 |
Quality Profile | 质量配置,一组代码规则,每个「Snapshot」都基于一个质量配置 |
Snapshot | 质量快照,在特定时间对特定项目的代码质量问题一次审查结果 |
Quality Gate | 质量阈或质量门,衡量代码审查结果的质量策略,达到「Quality Gate」要求表示待审查代码符合要求,支持两个维度:增量代码、全量代码 |
Project | 审查项目,与代码仓库一一对应,支持多分支 |
Token | 审查项目时所用授权验证 |
除此之外,还有其他的概念,可以查看这里。
2.2. 理解概念
这里总结了对概念理解有帮助的要点,帮助你更快理解。
- Sonarqube 代码审查的问题类型主要包括:错误(Bug)、漏洞(Vulnerability)、安全热点(Security Hotspot)、代码异味(Code Smell) 。
- 审查问题的依据的是不同编程语言的代码规则(Rule),为了方便通常把一组规则组合到一起,称为质量配置(Quality Profile )。
- 如果审查结果不满足质量门(Quality Gate),则会判定本次审查失败,可以利用这个特性配合 CI 工具实现自动化机器审查。
- 针对每个项目(Project),可以设置不同的质量配置(Quality Profile)、质量门(Quality Gate)、授权验证(Token),当然也可以使用默认配置。
- 项目(Project)的一次审查将会生成一个质量快照(Snapshot),快照包含了审查问题以及其对应的修复成本(Remediation Cost)和技术债务(Technical Debt),修复成本和技术债务是在规则(Rule)中预定义的,并不是 AI 智能动态计算的,所以只是参考。
3. 写在最后
在动手之前,建议花点时间去理解上面的介绍内容,能够更好的帮助你去使用 Sonarqube。