SonarQube 搭建代码质量管理平台(一)

栏目: 数据库 · 发布时间: 7年前

内容简介:SonarQube 由4部分构成:

SonarQube 是一个开源的代码分析平台,用来持续分析和评测代码的质量,支持检测 Java 、JavaScript、C#、C、C++ 等二十几种编程语言。通过 SonarQube 可以检测出项目中潜在的Bug、漏洞、代码规范、重复代码、缺乏单元测试的代码等问题,并提供了 UI 界面进行查看和管理。

架构

SonarQube 搭建代码质量管理平台(一)

SonarQube 由4部分构成:

  • SonarQube Server

    SonarQube Server 会启动3个主要进程:

    Web Server:UI 管理界面

    Search Server:基于 Elasticsearch 的搜索服务

    Compute Engine Server:计算引擎服务,进行代码分析并保存到SonarQube Database

  • SonarQube Database

    存储 SonarQube 实例的配置信息,项目、视图等的快照信息

  • SonarQube Scanners

    分析项目代码,可在构建/持续集成服务器上运行一个或多个

  • SonarQube Plugins

    SonarQube 插件管理

集成

SonarQube 搭建代码质量管理平台(一)

以上是官方提供的流程图,官方提供了支持不同 IDE 的 SonarLint 插件 ,插件会在编码过程中对代码进行分析,从而促使在开发阶段就能提高代码的质量。理论上我们应该遵循分析结果,乖乖的优化代码,但如果开发人员不按套路,不进行优化或不安装 SonarLint,非要把代码提交到 SCM(如: git, SVN, TFVC),一种方式可以在合并管道中加入代码检测环节,有问题直接拦截,提交失败,不过这有点过于粗暴了,很多情况下确实没这个必要;另一种方式是允许代码暂时提交到代码库,进入代码库后再次进行分析,有问题再回头优化( 代码库是必经之路,逃也逃不掉 )。

对代码库中的代码进行分析之前,我们需要搭建持续集成工具(如:Jenkins),并在 工具 中集成 SonarQube Scanners,根据持续集成工具设置的条件会自动触发拉取和 Build 代码,然后经过 SonarQube Scanners 分析并将分析报告发送到 SonarQube Server,SonarQube Server 对分析报告进行处理并保存到 SonarQube Database,同时可将分析报告发送给相关负责人进行 Review ,最终我们可以通过 UI 界面进行查看分析结果,开发人员对有问题的代码再次进行优化,如此循环。

环境要求

主要是两个要求,具体可参考 Prerequisite

  1. JDK 8
  2. MySQL (>=5.6 && <8.0) (也支持其他数据)

安装 SonarQube Server

  1. 下载 SonarQube ,一般情况使用社区版,其他版本可以试用,但最终需要 money
  2. 解压后,在 bin 文件夹中选择匹配的操作系统启动 SonarQube server

    # On Windows, execute:
    .\bin\windows-x86-xx\StartSonar.bat
     
    # On other operating system, execute:
    bin/[OS]/sonar.sh console
    

    SonarQube 搭建代码质量管理平台(一)

    从启动日志中可以看出 SonarQube server 依赖于 Elasticsearch,但并不需要单独下载,SonarQube 的下载包内已包含,如果想复用之前安装过的 Elasticsearch,请根据需要调整配置文件 conf/sonar.properties 中 Elasticsearch 部分。

  3. 启动成功后访问: http://localhost:9000 ,默认登录账号/密码:admin/admin

SonarQube 搭建代码质量管理平台(一)

配置 SonarQube Database

安装后 MySQL 后,创建数据库 sonar,修改 SonarQube 配置文件 /conf/sonar.properties MySQL相关部分,重启后 sonar 数据库中会创建部分相关的表。

#----- MySQL >=5.6 && <8.0
# Support of MySQL is dropped in Data Center Editions and deprecated in all other editions
# Only InnoDB storage engine is supported (not myISAM).
# Only the bundled driver is supported. It can not be changed.
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.jdbc.username=root
sonar.jdbc.password=
sonar.sorceEncoding=UTF-8

安装 SonarQube Scanners

选择对应的操作系统版本 下载 SonarQube Scanners ,下载后可将 bin 目录路径加入 Path 中,之后直接通过 sonar-scanner 全局命令执行代码分析。

对 JavaScript 项目进行代码分析

下载 JavaScript 项目代码 ,在项目根目录下创建 sonar-project.properties:

SonarQube 搭建代码质量管理平台(一)

在 sonar-project.properties 添加配置如下:

# Sonar项目标识,在 SonarQube实例下必须唯一
sonar.projectKey=test

# 在 SonarQube UI 中显示的项目名称
sonar.projectName=ApiDoc

# 项目版本
sonar.projectVersion=1.0
 
# 项目代码与 sonar-project.properties 文件的相对路径
sonar.sources=.
 
# 代码文件的编码
sonar.sourceEncoding=UTF-8

# 排除不参与代码分析的文件或目录
sonar.exclusions=node_modules/**/*,.idea/**/*

在项目根目录下执行命令:

sonar-scanner

SonarQube 搭建代码质量管理平台(一)

执行成功后,再次访问: http://localhost:9000 ,出现一个 ApiDoc 项目的分析概要,并提示有一个不规范问题,测试覆盖率 0。

注意:日志中的 ”Analysis report compressed in 205ms, zip size=518 KB“说明了压缩后的分析报告大小,最终这部分数据会存储到 MySQL,MySQL 默认接受的最大数据包为 4M,如果压缩包过大,这里的提交就会失败,这时候需要修改 MySQL 的 max_allowed_packet 的值。

SonarQube 搭建代码质量管理平台(一)

SonarQube 搭建代码质量管理平台(一)

修复掉不规范问题后重新执行命令 sonar-scanner ,结果如下:

SonarQube 搭建代码质量管理平台(一)

同时在 MySQL 的 sonar 数据库中又会自动创建相关的表,并对分析结果进行存储。

SonarQube 搭建代码质量管理平台(一)

以上通过对本地目录下的一个 JavaScript 项目进行分析测试,实际情况应该是基于 SCM ,并配合持续集成工具进行自动化代码分析,下篇介绍。

参考链接


以上所述就是小编给大家介绍的《SonarQube 搭建代码质量管理平台(一)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Usability for the Web

Usability for the Web

Tom Brinck、Darren Gergle、Scott D. Wood / Morgan Kaufmann / 2001-10-15 / USD 65.95

Every stage in the design of a new web site is an opportunity to meet or miss deadlines and budgetary goals. Every stage is an opportunity to boost or undercut the site's usability. Thi......一起来看看 《Usability for the Web》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

MD5 加密
MD5 加密

MD5 加密工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具