51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 1754|回复: 0

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

[复制链接]
  • TA的每日心情
    无聊
    2024-3-7 09:16
  • 签到天数: 43 天

    连续签到: 2 天

    [LV.5]测试团长

    发表于 2021-11-26 15:27:21 | 显示全部楼层 |阅读模式
    一、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安装在本地)
    1.    mysql -u root -p
    2.       mysql> CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;
    3.       mysql> CREATE USER 'sonar' IDENTIFIED BY 'sonar';
    4.       mysql> GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
    5.       mysql> GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
    6.       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。
    1.     # User credentials.
    2.       # Permissions to create tables, indices and triggers must be granted to JDBC user.
    3.       # The schema must be created first.
    4.       sonar.jdbc.username=sonar
    5.       sonar.jdbc.password=sonar
    6.       #----- Embedded Database (default)
    7.       # H2 embedded database server listening port, defaults to 9092
    8.       #sonar.embeddedDatabase.port=9092
    9.       #----- MySQL 5.6 or greater
    10.       # Only InnoDB storage engine is supported (not myISAM).
    11.       # Only the bundled driver is supported. It can not be changed.
    12.       sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
    13.       # TCP port for incoming HTTP connections. Default value is 9000.
    14.       #sonar.web.port=9000
    15.       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/displ ... h+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服务器。
    1.   #Configure here general information about the environment, such as SonarQube server connection details for example
    2.   #No information about specific project should appear here
    3.   #----- Default SonarQube server
    4.   sonar.host.url=http://localhost:11000
    复制代码
     III. 到你想检测的工程根目录下新建文件sonar-project.properties,文件内容如下?,文件中的参数配置,参考Sonar Analysis Parameters这篇文章
    1.     #这里的配置转自https://www.jianshu.com/p/e384595d0b14,并进行部分调整,如加进JACOCO参数
    2.       # 指定SonarQube instance必须是唯一的
    3.       sonar.projectKey=Guns
    4.       # 设置SonarQube UI显示的名称
    5.       # PS:有人会问这里的名称是否可以是中文名称,我在网上搜索了好多资料都说是不可以的(至少我看到的资
    6.       #料都是)后来自己尝试了一下,答案是可以写成中文的,但是要换一种方式,比如你想把项目名称命名为“测
    7.       #试”,那么在这里就要写成“\u6d4b\u8bd5”,那么下面这个参数就应该这样写“sonar.projectName=
    8.       #\u6d4b\u8bd5”,说白了就是将中文转成Unicode
    9.       sonar.projectName=Guns
    10.       sonar.projectVersion=1.0
    11.       sonar.language=java
    12.       # 指定src和classes文件夹位置,当然也可以是全路径,如果是当前工程根目录下用“.”表示也可以,比如“sonar.sources=.”
    13.       sonar.sources=src/main
    14.       sonar.test=src/test
    15.       sonar.java.binaries=target
    16.       # 下面的这两个参数作用是相同的,因为有时我们需要指定某个文件夹或者忽略某个文件夹
    17.       # sonar.inclusions=src1/**,src3/**
    18.       # sonar.exclusions=src2/**,src4/**
    19.       # 源码编码,默认是系统编码
    20.       sonar.sourceEncoding=UTF-8
    21.       # Set jacoco Configuration
    22.       # 指定代码覆盖率工具
    23.       sonar.core.codeCoveragePlugin=jacoco
    24.       # 指定exec二进制文件存放路径
    25.       #sonar.jacoco.reportPaths=[yourPath/]jacoco.exec
    26.       #本demo之前设置的exec文件是在工程根目录下的target/coverage-reports下:
    27.       sonar.jacoco.reportPaths=target/coverage-reports/jacoco-unit.exec
    28.       # 以下属性可选择性加,当然也可以不加
    29.       sonar.dynamicAnalysis=reuseReports
    30.       sonar.jacoco.reportMissing.force.zero=false
    复制代码
     3.2 运行
      在命令行模式下,在工程的根目录下键入命令“sonar-scanner”,你会看到以下日志:

      运行 sonar-scanner
      接着,重新登录 SonarQube 平台,检测的结果已经在平台上展现出来。

      从上图你可以看出来,连单元测试覆盖率的统计也生成出来了,主要原因为在该maven项目之前已经集成了Jacoco插件。

    本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理






    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-4-19 06:50 , Processed in 0.064287 second(s), 24 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表