SonarQube 简介

Sonar (SonarQube)是一个开源平台,用于管理源代码的质量。 Sonar 不只是一个质量数据报告工具,更是代码质量管理平台。 支持java, C#, C/C++, PL/SQL, Cobol, JavaScrip, Groovy 等等二十几种编程语言的代码质量管理与检测。 Sonar可以从以下七个维度检测代码质量,而作为开发人员至少需要处理前5种代码质量问题。

1、不遵循代码标准:sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具规范代码编写。

2、潜在的缺陷:sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具检 测出潜在的缺陷。

3、糟糕的复杂度分布:文件、类、方法等,如果复杂度过高将难以改变,这会使得开发人员难以理解它们, 且如果没有自动化的单元测试,对于程序中的任何组件的改变都将可能导致需要全面的回归测试。

4、重复:显然程序中包含大量复制粘贴的代码是质量低下的,sonar可以展示源码中重复严重的地方。

5、注释不足或者过多:没有注释将使代码可读性变差,特别是当不可避免地出现人员变动时,程序的可读性将大幅下降而过多的注释又会使得开发人员将精力过多地花费在阅读注释上,亦违背初衷。

6、缺乏单元测试:sonar可以很方便地统计并展示单元测试覆盖率。

7、糟糕的设计:通过sonar可以找出循环,展示包与包、类与类之间的相互依赖关系,可以检测自定义的架构规则 通过sonar可以管理第三方的jar包,可以利用LCOM4检测单个任务规则的应用情况, 检测耦合。

 

SonarQube 单体架构

1、SonarQube Server 包含3个主要服务进程 ①WebServer ②SearchServer 使用elastic search 做为搜索的工具ui ③ComputeEngineServer 分析并且保存到sonar数据库中。

2、SonarQube Database ① 配置实例项、插件安装等 ② 项目质量快照视图。

3、SonarQube Plugins 各种插件:如 语言插件、认证插件、编程语言检查插件等等。

4、SonarQube Scanners 分析项目的工具。

 

SonarQube 集群

1、在IDE中使用sonarlint运行本地分析。

2、开发者将代码提交到scm工具中。

3、持续集成工具自动触发检查代码执行SonarQube Scanner 运行sonarqube分析。

4、分析报告传递给sonarqube server进行加工处理。

5、进行处理分析、将数据保存到数据库中、将效果通过ui展示出来。

6、开发者通过sonarqube ui查看自己的bug和技术债等。

7、项目经理、运维经理、测试经理通过代码报表进行查看管理。

 

SonarQube 的安装

1、从官网下载所需要的SonarQube的安装包:https://www.sonarqube.org/downloads/。一般情况下,只需要安装社区版免费的SonarQube服务即可,可以基于二进制文件安装或者直接使用Docker下载镜像启动,二进制文件安装的过程比较复杂,因为SonarQube内部依赖内置的ElasticSearch做搜索,在Linux系统中需要添加一个非root用户,并且修改一些列的系统参数例如系统支持的最大可打开的文件数等等。此外,SonarQube是一个Java应用,需要本地安装JDK。自SonarQube的7.9版本开始放弃支持MySQL数据库,8.3.1版本下只支持内存模式、PostgreSQL、Microsoft SQL Server和Oracle四种存储引擎。下面会详细记录基于Window环境下SonarQube服务安装的过程。

2、安装JDK 1.8,在SonarQube 8.3.1版本中需要安装Jdk11+, 考虑到采用mysql实现数据持久化,所以本文我们以SonarQube 7.7版本进行讲解,JDK的最低版本要求为1.8。

3、将下载好的sonarqube-7.7.zip安装包,解压到安装目录。

 

4、进入到sonarqube-7.7\bin\windows-x86-64目录中,双击StartSonar.bat启动服务。当看到 Process[ce] is up,SonarQube is up 表示服务启动成功;

 

5、访问http://localhost:9000/进入SonarQube登录界面,SonarQube的默认用户名密码为admin/admin

6、安装中文插件包 

Administration --> Marketplace --> 搜索输入框中输入chinese --> install,安装完后重启服务。

如果Install失败,可以直接去官网https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases下载对应版本的中文包,放到Sonar的插件目录下。

7、SonarQube支持Gradle、Maven、Ant等多种方式的扫描,我们以Maven为例。

a)修改apache-maven-3.6.1\conf目录下的settings.xml文件

  <pluginGroups>
    <pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
  </pluginGroups>

  <proxies>
    <profile>
        <id>sonar</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <sonar.host.url>
              http://localhost:9000 #根据自己的实际情况进行配置
            </sonar.host.url>
        </properties>
    </profile>
  </proxies>

b)在Maven工程中通过命令执行扫描,或者通过开发工具也可以完成扫描工作。

mvn clean install sonar:sonar

 

c)执行完扫描后,访问http://localhost:9000可以直接看到扫描结果。

 

SonarQube 数据持久化

1、SonarQube 默认的数据库使用的是内存数据库H2,我们可以通过H2官网http://www.h2database.com/html/main.html下载软件进行访问,也可以通过IDEA连接访问。

Url:jdbc:h2:tcp://localhost:9092/sonar

用户名,密码默认为空,H2的默认端口为9092

2、如果我们需要数据持久化,就需要修改Sonar的配置文件sonarqube-7.7\conf\sonar.properties。7.7版本保留了对mysql的支持,但是只支持5.6到8.0之间的版本,不包括8.0本身。

#--------------------------------------------------------------------------------------------------
# DATABASE
#
# IMPORTANT:
# - The embedded H2 database is used by default. It is recommended for tests but not for
#   production use. Supported databases are MySQL, Oracle, PostgreSQL and Microsoft SQLServer.
# - Changes to database connection URL (sonar.jdbc.url) can affect SonarSource licensed products.

# User credentials.
# Permissions to create tables, indices and triggers must be granted to JDBC user.
# The schema must be created first.
sonar.jdbc.username=root
sonar.jdbc.password=root

#----- Embedded Database (default)
# H2 embedded database server listening port, defaults to 9092
#sonar.embeddedDatabase.port=9092

#----- DEPRECATED 
#----- 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

 

在Eclipse、IntelliJ IDEA 中通过插件,完成对项目的代码扫描

1、 以Idea为例,Setting --> Plugins -->  输入sonar-->  install 安装SonarLint插件

2、针对需要扫描的工程反键执行SonarLint插件即可。

posted on 2020-05-23 18:36  愚蠢的猴子  阅读(4203)  评论(0编辑  收藏  举报