代码质量分析工具 SonarQube

2023年 1月 4日 22.7k 0

1. 谁需要 SonarQube

代码审查是高质量软件开发过程中不可缺少的重要环节,能帮助开发者及时发现代码中的 Bug,提升代码质量、可维护性。代码审查的维度包括,语言规范、代码风格、设计合理等。人工检查这些事项,会消耗大量的精力和时间。代码质量分析工具为此而生,帮助开发者从重复、繁琐地审查中解脱出来,聚焦于功能设计和实现。代码格式、语法规范、程序 Bug 等审查都交给代码质量分析工具。对于在 Github 等公网上托管的项目,有大量可用的 SaaS 服务,例如,Code Climate、Codacy。通常,它们与 Github 直接打通,提供免费的代码质量分析服务。但是在企业内网中,没有外网,代码敏感,我们需要支持私有化部署的代码质量分析工具。SonarQube 就是一个开源、可私有化部署的代码质量分析工具。

2. SonarQube 是什么

SonarQube 是一个开源的代码质量管理系统。特征:

  • 支持超过25种编程语言,Java、C/C++、C#、PHP、Flex、Groovy、JavaScript、Python、PL/SQL、COBOL 等
  • 提供重复代码、编码标准、单元测试、代码覆盖率、代码复杂度、潜在 Bug、注释和软件设计报告
  • 提供了指标历史记录
  • 支持与 Maven、Ant、Gradle 、Atlassian Bamboo、Jenkins、Hudson 等集成
  • 支持 IDE 集成
  • 支持 JIRA、Mantis、LDAP、Fortify 等外部工具集
  • 支持扩展插件

3. SonarQube 安装

SonarQube 由两部分组成:

  • SonarQube,服务端平台
  • sonar-scanner,客户端代码分析、结果上报

3.1 服务器端安装

这里采用 docker-compose 的方式运行 SonarQube。新建文件 docker-compose.yml :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
version: '2'

services:
  sonarqube:
    image: sonarqube:7.1
    ports:
        - "9000:9000"
    links:
        - postgres
    environment:
        - SONARQUBE_JDBC_URL:jdbc:postgresql://db:5432/sonar

  postgres:
    image: postgres:9.6.15
    volumes:
      - ./postgres:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_USER=sonar
      - POSTGRES_PASSWORD=sonar

在文件所在目录,新建空目录 postgres ,然后执行命令:

1
docker-compose up

3.2 客户端安装

以 OS X 为例,

1
2
3
4
brew install sonar-scanner
==> Downloading https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar
######################################################################## 100.0%
🍺  /usr/local/Cellar/sonar-scanner/4.0.0.1744: 7 files, 631KB, built in 25 seconds

4. 项目测试

使用 SonarQube 时,需要提供一些必要的参数,例如,SonarQube Server 的地址、源码位置等。有两种方式可以提供这些参数:

  • 通过命令行

Python 项目:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
sonar-scanner   -Dsonar.projectKey=bk-sops   -Dsonar.sources=.   -Dsonar.host.url=http://localhost:9000    -Dsonar.language="py"
...
INFO: More about the report processing at http://localhost:9000/api/ce/task?id=AWyzn_gfzoHby8A3MxUD
INFO: Task total time: 18.141 s
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 20.403s
INFO: Final Memory: 7M/37M
INFO: ------------------------------------------------------------------------
  • 通过配置文件

新建配置文件 sonar-project.properties :

1
2
3
4
5
6
7
8
sonar.projectKey=devops-python-sample
sonar.projectName=devops-python-sample
sonar.host.url=http://localhost:9000 #本地可以缺省,如果是远程服务,需要修改为合适地址
sonar.projectVersion=1.0
sonar.sources=./
sonar.language=py
sonar.sourceEncoding=UTF-8
# sonar.login=xxxxxx  登陆信息

执行命令:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
sonar-scanner
...
INFO: More about the report processing at http://127.0.0.1:9000/api/ce/task?id=AWyzoVZVzoHby8A3MxUE
INFO: Task total time: 5.260 s
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 7.583s
INFO: Final Memory: 7M/34M
INFO: ------------------------------------------------------------------------

下面查看 SonarQube 的分析页面:首页项目页面缺陷展示

5. 参考

  • https://zh.wikipedia.org/wiki/SonarQube
  • https://github.com/SonarSource/sonarqube

相关文章

KubeSphere 部署向量数据库 Milvus 实战指南
探索 Kubernetes 持久化存储之 Longhorn 初窥门径
征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
那些年在 Terraform 上吃到的糖和踩过的坑
无需 Kubernetes 测试 Kubernetes 网络实现
Kubernetes v1.31 中的移除和主要变更

发布评论