惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
WordPress大学
WordPress大学
T
Tailwind CSS Blog
V
Visual Studio Blog
月光博客
月光博客
Hugging Face - Blog
Hugging Face - Blog
小众软件
小众软件
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - Franky
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Last Week in AI
Last Week in AI
阮一峰的网络日志
阮一峰的网络日志
量子位
有赞技术团队
有赞技术团队
酷 壳 – CoolShell
酷 壳 – CoolShell
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
Jina AI
Jina AI
雷峰网
雷峰网
博客园 - 【当耐特】
博客园 - 叶小钗
美团技术团队
宝玉的分享
宝玉的分享
IT之家
IT之家

陈少文的网站

巨变与机遇的未来十年 Kubernetes 平台管理软件压力测试方案 使用镜像部署 Hexo 静态页面 终于等到你 - GitHub 镜像仓库服务(ghcr.io) 一起来学 Go --(6)Interface 一起来学 Go --(5)Goroutine 和 Channel 什么是函数式编程 如何在 Kubernetes 集群集成 Kata 柯里化与偏函数 使用 PyGithub 自动创建 Label 软件产品是团队能力的输出 Helm 2 、Helm 3 比较 IoT 变现 Kubernetes 中的 DNS 服务 国内的 Helm 镜像源 Harbor 使用自签证书支持 Https 访问 DevOps 工具链之 Prow 如何使用 kfctl 安装 Kubeflow VS Code 无法下载 Go 插件的工具包 工程师更应具有服务精神 你不知道的 Docker 使用技巧 使用 Docker 运行 Tensorflow 论中国 什么是左移 如何清空 Git 仓库全部历史记录 一禅小和尚 有风吹过厨房 时间的玫瑰 如何在 CentOS 安装 GPU 驱动 开发 Tips(19)
代码质量分析工具 SonarQube
微信公众号 · 2019-08-21 · via 陈少文的网站

Please enable Javascript to view the contents

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


微信公众号