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
,然后执行命令:
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