Please enable Javascript to view the contents

代码质量分析工具 SonarQube

 ·  ☕ 2 分钟

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 :

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. 参考


微信公众号
作者
微信公众号