代码质量管理平台实战:SonarQube 安装、配置

发表于:2021-11-05 09:29

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    来源:知乎

分享:
  一、SonarQube
  1.1 简介
  SonarQube 是一个用于代码质量管理的开源平台,用于管理源代码的质量。同时 SonarQube 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 SonarQube。此外, SonarQube 的插件还可以对 Java 以外的其他编程语言提供支持,对国际化以及报告文档化也有良好的支持。
  官方网址:https://www.sonarqube.org/
  1.2 使用范围
  通过插件形式,可以支持包括 Java,C#,C/C++、PL/SQL、Cobol、JavaScrip、Groovy、Ruby 等二十五种编程语言的代码质量管理与检测,针对不同的编程语言其所提供的分析方式也有所不同:对于所有支持的编程语言,SonarQube 都提供源了代码的静态分析功能;对于某些特定的编程语言,SonarQube 提供了对编译后代码的静态分析功能。
  SonarQube 支持多种客户端集成方式,包括但不限于 Scanner 客户端、Ant、Gradle、Maven、Jenkins、IDEA 插件等。比较常用的为 Gradle 和 Maven。
  1.3 工作原理
  SonarQube 并不是简单地将各种质量或覆盖率检测工具的结果(例如 CheckStyle、JaCoCo 等)直接展现给客户,而是通过不同的插件算法来对结果进行再加工,并最终以量化的方式来衡量代码质量,从而方便地对不同规模和种类的工程进行相应的代码质量管理,以便进行有针对性的代码修复或重构。
  SonarQube 在进行代码质量管理时,会从以下的七个纬度对项目代码质量进行分析。
  1.4 扩展性
  Sonar 实际上是一个 Web 系统,展现了静态代码扫描的结果,结果是可以自定义的,而真正实现代码扫描的是 Sonar Scanner 这个工具,另外同时支持多种语言的原理是它的扩展性,通过插件实现的,也就是 Java Jar 架包,可以在 Sonar 平台上在线安装或者离线安装。
  二、SonarQube 安装、配置
  2.1 前置条件
  1. 已安装 JDK1.8 环境
  2. 已安装 Maven(用于后期与 SonarQube、JaCoCo 的集成)
  3. 已安装 MySQ L数据库(Sonar 默认的数据库是自带 H2 数据库,是很小的嵌入式数据库引擎,这里的配置换成了 MySQL,为了方便通过数据库客户端进行数据查询)
  2.2 配置工作
  1.下载 SonarQube,地址为:
  http://www.sonarqube.org/downloads/
  2.配置数据库(下面的SQL是指定了schema为sonar,password为sonar,其中第四条SQL是localhost是因为MySQL安装在本地)
      mysql -u root -p
      mysql> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci; 
      mysql> CREATE USER 'sonar' IDENTIFIED BY 'sonar';
      mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
      mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
      mysql> FLUSH PRIVILEGES;
  3.安装 SonarQube
  I. 将下载的 sonar-3.7.zip 包解压至 Windows某个路径,如 D:\Tools\sonar(如是其他OS,请选择对应路径,如Linux的/usr/local/等)。
  II. 修改 sonar.properties
  在 /conf/sonar.properties 文件中,配置数据库设置(默认已经提供了各类数据库的支持这里使用 MySQL,因此取消 MySQL 模块的注释),同时因为端口冲突而改成端口为 11000。
      # User credentials.
      # Permissions to create tables, indices and triggers must be granted to JDBC user.
      # The schema must be created first.
      sonar.jdbc.username=sonar
      sonar.jdbc.password=sonar
      #----- Embedded Database (default)
      # H2 embedded database server listening port, defaults to 9092
      #sonar.embeddedDatabase.port=9092
      #----- MySQL 5.6 or greater
      # 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
      # TCP port for incoming HTTP connections. Default value is 9000.
      #sonar.web.port=9000
      sonar.web.port=11000
  III.在 /bin/ 目录下,运行 /windows-x86-64/StartSonar.bat (因为本 demo 是在 win10 64位安装的,如果是 Linux 的话,运行 nohup bash sonar.sh start &)
  IV. 访问 http://localhost:11000,如果不是本机就输入 http://[remote IP]:11000,如果你看到下图所示即证明配置成功。
  4.用 admin/admin(默认)进行登录,并安装汉化包
  Chinese pack installation
  Chinese pack restart
  Chinese pack restart confirm
  Well done!
  三、Sonar Scanner 安装、配置
  3.1 配置工作
  1. 下载Sonar Scanner,地址为:
  https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner
  2. 将下载的 sonar-scanner-cli-3.3.0.1492-windows.zip 包解压至 Windows 某个路径,如D:\Tools\sonar(如是其他OS,请选择对应路径,如Linux的/usr/local/等)
  3. 修改环境变量
  新增变量:
  SONAR_SCANNER_HOME = D:\Tools\sonar\sonar-scanner-3.3.0
  修改Path变量:增添
  %SONAR_SCANNER_HOME%\bin\
  4. 安装Sonar Scanner
  I. 将下载的 sonar-3.7.zip 包解压至 Windows 某个路径,如 D:\Tools\sonar(如是其他 OS,请选择对应路径,如 Linux的/usr/local/ 等)。
  II. 修改 sonnar-scanner.properties
  在 /conf/sonar-scanner.properties 文件中,设置SonarQube服务器。
  #Configure here general information about the environment, such as SonarQube server connection details for example
  #No information about specific project should appear here
  #----- Default SonarQube server
  sonar.host.url=http://localhost:11000
  III. 到你想检测的工程根目录下新建文件sonar-project.properties,文件内容如下?,文件中的参数配置,参考Sonar Analysis Parameters这篇文章
      #这里的配置转自https://www.jianshu.com/p/e384595d0b14,并进行部分调整,如加进JACOCO参数
      # 指定SonarQube instance必须是唯一的
      sonar.projectKey=Guns
      # 设置SonarQube UI显示的名称 
      # PS:有人会问这里的名称是否可以是中文名称,我在网上搜索了好多资料都说是不可以的(至少我看到的资
      #料都是)后来自己尝试了一下,答案是可以写成中文的,但是要换一种方式,比如你想把项目名称命名为“测
      #试”,那么在这里就要写成“\u6d4b\u8bd5”,那么下面这个参数就应该这样写“sonar.projectName= 
      #\u6d4b\u8bd5”,说白了就是将中文转成Unicode
      sonar.projectName=Guns
      sonar.projectVersion=1.0
      sonar.language=java
      # 指定src和classes文件夹位置,当然也可以是全路径,如果是当前工程根目录下用“.”表示也可以,比如“sonar.sources=.”
      sonar.sources=src/main
      sonar.test=src/test
      sonar.java.binaries=target
      # 下面的这两个参数作用是相同的,因为有时我们需要指定某个文件夹或者忽略某个文件夹
      # sonar.inclusions=src1/**,src3/**
      # sonar.exclusions=src2/**,src4/**
      # 源码编码,默认是系统编码
      sonar.sourceEncoding=UTF-8
      # Set jacoco Configuration
      # 指定代码覆盖率工具
      sonar.core.codeCoveragePlugin=jacoco
      # 指定exec二进制文件存放路径
      #sonar.jacoco.reportPaths=[yourPath/]jacoco.exec
      #本demo之前设置的exec文件是在工程根目录下的target/coverage-reports下:
      sonar.jacoco.reportPaths=target/coverage-reports/jacoco-unit.exec
      # 以下属性可选择性加,当然也可以不加
      sonar.dynamicAnalysis=reuseReports
      sonar.jacoco.reportMissing.force.zero=false
  3.2 运行
  在命令行模式下,在工程的根目录下键入命令“sonar-scanner”,你会看到以下日志:
  运行 sonar-scanner
  接着,重新登录 SonarQube 平台,检测的结果已经在平台上展现出来。
  从上图你可以看出来,连单元测试覆盖率的统计也生成出来了,主要原因为在该maven项目之前已经集成了Jacoco插件。

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号