SonarQube 安装及使用

简介

SonarQube 是一款用于代码质量管理的开源工具,是静态代码检查工具,采用B/S架构它主要用于管理源代码的质量,可以支持众多计算机语言,比如 php,java, C#, go,C/C++, Cobol, JavaScrip, Groovy 等。sonar可以通过 PMD,CheckStyle,Findbugs 等等代码规则检测工具来检测你的代码,帮助你发现代码的漏洞,Bug,异味等信息。

可以从七个维度检测代码质量:

1. 复杂度分布(complexity):代码复杂度过高将难以理解
2. 重复代码(duplications):程序中包含大量复制、粘贴的代码而导致代码臃肿,sonar可以展示源码中重复严重的地方
3. 单元测试统计(unit tests):统计并展示单元测试覆盖率,开发或测试可以清楚测试代码的覆盖情况
4. 代码规则检查(coding rules):通过Findbugs,PMD,CheckStyle等检查代码是否符合规范
5. 注释率(comments):若代码注释过少,特别是人员变动后,其他人接手比较难接手;若过多,又不利于阅读
6. 潜在的Bug(potential bugs):通过Findbugs,PMD,CheckStyle等检测潜在的bug
7. 结构与设计(architecture & design):找出循环,展示包与包、类与类之间的依赖、检查程序之间耦合度

架构

SonarQube 平台由 4 个组件组成:
架构

  1. 一个 SonarQube 服务器启动 3 个主要进程:

    • 供开发人员、管理人员浏览质量快照和配置 SonarQube 实例的 Web 服务器

    • 基于 Elasticsearch 的 Search Server 支持从 UI 进行搜索

    • Compute Engine Server 负责处理代码分析报告并将其保存在 SonarQube 数据库中

      SonarQube 安装及使用

  2. 一个用于存储的 SonarQube 数据库:

    • SonarQube 实例的配置(安全性、插件设置等)
    • 项目、视图等的质量快照。
  3. 服务器上安装了多个 SonarQube 插件,包括语言、SCM、集成、身份验证等

  4. 在您的构建/持续集成服务器上运行一个或多个 SonarScanner 来分析项目

一体化

一体化

  1. 开发人员在他们的 IDE 中编码并使用 SonarLint 运行本地分析。
  2. 开发人员把代码推送到 Git 等代码管理仓库
  3. 通过 Jenkens 等持续集成服务器,并使用 sonar-scanner 进行代码分析
  4. 分析报告被发送到 SonarQube 服务器进行处理。
  5. SonarQube Server 将分析报告结果处理并存储在 SonarQube 数据库中,并在 UI 中显示结果。
  6. 开发人员通过 SonarQube UI 审查、评论、挑战他们的问题,以管理和减少他们的技术债务。
  7. 使用 API 来自动化配置并从 SonarQube 中提取数据。

安装 sonar

本文安装的版本是 SonarQube 7.6 版本,目前最高版本(2021年7月27日10:29:21) SonarQube 9.0,2019年4月10号,SonarQube 发文称在7.9之后,所有的 SonarQube 的版本中将停止对 MySQL 的支持。

  1. SonarQube 7.6
  2. java 1.8
  3. Mysql 5.6

CentOs6.9 安装可参考 博客

安装完后可打开网址:
SonarQube 安装及使用

安装 sonar-scanner

本文使用 Sonar-scanner 进行代码分析

  1. 根据环境 下载,本文以 linux 系统为例

  2. 上传 sonar-scanner-cli-4.6.2.2472-linux.zip 文件到虚拟机或服务器

  3. 解压缩

     `unzip sonar-scanner-cli-4.6.2.2472-linux.zip`
  4. 添加 sonar-scanner-4.6.2.2472-linux/bin 到环境变量

    • vim /etc/profile
        #配置 sonar-scanner
        SONAR_RUNNER_HOME=/opt/sonar-scanner-4.6.2.2472-linux
        PATH=$SONAR_RUNNER_HOME/bin:$PATH
        export  SONAR_RUNNER_HOME
        export  PATH
    • source /etc/profile
    • sonar-scanner -h 查看是否添加成功
        INFO: 
        INFO: usage: sonar-scanner [options]
        INFO: 
        INFO: Options:
        INFO:  -D,--define <arg>     Define property
        INFO:  -h,--help             Display help information
        INFO:  -v,--version          Display version information
        INFO:  -X,--debug            Produce execution debug output
  5. 修改 sonar-scanner 配置文件 sonar-scanner-4.6.2.2472-linux/conf

    • vim sonar-scanner.properties

        #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://127.0.0.1:10005
      
        #----- Default source code encoding
        #sonar.sourceEncoding=UTF-8
        sonar.jdbc.url=jdbc:mysql://127.0.0.1:3307/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
        #数据库账号
        sonar.jdbc.username=sonar
        #数据库密码
        sonar.jdbc.password=sonar
        sonar.sorceEncoding=UTF-8

      此配置文件是有关环境的常规信息,例如SonarQube服务器连接详细信息。有关特定项目的信息不应该在此处配置

检测代码

SonarQube 创建项目

  1. 打开 SonarQube Web 页面创建项目
    SonarQube 安装及使用
    SonarQube 安装及使用
    SonarQube 安装及使用
    SonarQube 安装及使用
    本文使用 PHP 进行分析

使用 Sonar-scanner 分析代码

  1. 进入需要分析的代码项目路径下

  2. touch sonar-project.properties 在项目路径下创建文件,

  3. vim sonar-project.properties

     # must be unique in a given SonarQube instance
     sonar.projectKey=test
    
     # --- optional properties ---
    
     # defaults to project key
     sonar.projectName=test
     # defaults to 'not provided'
     sonar.projectVersion=1.0
    
     # Path is relative to the sonar-project.properties file. Defaults to .
     # 多个路径可以使用逗号隔开
     sonar.sources=./app,./config
    
     # Encoding of the source code. Default is default system encoding
     sonar.sourceEncoding=UTF-8
     #这个具体作用目前不太清除,官网也没写
     sonar.java.binaries=.
     # SonarQube 创建项目生成的令牌
     sonar.login=6c8148e18e76fbc96e73354
    描述
    sonar.projectKey 项目的唯一键。允许的字符是:字母,数字 - , _ , . 和 : ,与至少一个非数字字符。
    sonar.sources 需要进行代码分析的文件目录,多个使用逗号分割
    sonar.projectName 将显示在 Web 界面上的项目名称。
    sonar.projectVersion 项目版本
    sonar.login 对项目具有执行分析权限的 SonarQube 用户的登录或身份验证令牌
    sonar.password 与sonar.login 用户名一起使用的密码。如果正在使用身份验证令牌,则应将其留空
    sonar.projectDescription 项目说明
    sonar.sourceEncoding 源文件的编码。例如: UTF-8

    更过参数请参考 官方文档

  4. 在 sonar-project.properties 文件同级目录执行 sonar-scanner
    SonarQube 安装及使用

  5. 查看 SonarQube Web 页面,就可以看到 test 项目有一个 后台任务 正在执行,此时就是 Sonar-scanner 提交数据到 SonarQube 服务器,SonarQube 服务器分析数据
    SonarQube 安装及使用

  6. 后台任务执行完,就可以查看代码分析结果
    SonarQube 安装及使用

SonarQube 简单使用

用户管理

  1. 创建群组

    1. 配置 > 权限 > 群组 > 右上角
      SonarQube 安装及使用
  2. 创建用户

    1. 配置 > 权限 > 用户 > 右上角
      SonarQube 安装及使用
  3. 添加用户到 PHP 群组
    SonarQube 安装及使用

  4. 配置 PHP 群组对 test 项目的权限

    • 项目 -> test 项目 -> 配置 -> 权限
      SonarQube 安装及使用
      权限页面可以设置当前项目是 公开私有 项目
      可以分配给 PHP 群组六个具体权限
  5. 具体的权限分类

    • 浏览:访问一个项目,浏览它的指标,创建 / 编辑它的问题。
    • 查看源码:查看项目的源代码。(用户也需要“浏览”权限)
    • 问题管理员:对问题进行额外编辑:设置误判 / 不会修复,修改问题严重级别。(用户也需要“浏览”权限)
    • 管理安全热点:通过”安全热点”检测漏洞。驳回,清理,接受,重开”安全热点”(用户也需要”浏览”权限)
    • 管理员:查看项目配置,执行管理任务。(用户也需要“浏览”权限)
    • 执行分析:可以获取执行分析的所有配置(包含安全配置,比如密码),并可以将分析结果推送至SonarQube服务器。

质量配置

质量配置是在分析时使用的 规则集合。每个语言都有默认配置。没有指定其他配置的项目会使用默认配置。

PHP 的质量配置安装后有三个 DrupalPSR-2Sonar way

SonarQube 安装及使用

其中 Sonar way 是系统默认使用的质量配置,可以看到规则有 111 种。

自定义质量配置

如果系统默认的满足不了现有条件,点击右上角 创建 按钮

SonarQube 安装及使用
可根据现有的质量配置创建一个新的配置,或创建一个空的配置。

SonarQube 安装及使用

  1. 新建的配置可以分配权限给群组或个人
  2. 可以把当前配置分配给具体项目,使用此配置进行代码检测
  3. 添加更多的规则
    SonarQube 安装及使用

除此之外还有一些其它基础配置

SonarQube 安装及使用

质量阈

质量阈相当于一个代码检测的阈值,代码问题超过阈值会出现提示,或发送邮件通知。
默认的质量阈 Sonar Way,如果一个项目没有指定质量阈,则默认使用此质量阈。

可根据项目不同,创建不同的质量阈

SonarQube 安装及使用

  1. 根据具体要求添加不同的指标
  2. 选择适用的项目

SonarQube 安装及使用
可看到 bugs 数阈值设定的 10,代码检测出来92,此时项目状态为 错误级别(没有超阈值为 正常

邮件通知

SonarQube 可以设置在一些事件发生时,通过邮件的方式进行提醒

开启邮箱 SMTP 服务

在 QQ邮箱 中开启服务
SonarQube 安装及使用

  1. 开启 IMAP/SMTP 服务
  2. 生成授权码

SonarQube 邮箱配置

可以使用有修改配置权限的账号,或管理员账号进行邮件信息配置

SonarQube 安装及使用

SonarQube 安装及使用

SonarQube 邮件通知配置

可以在 我的账号 -> 提醒 选择需要开启的通知

SonarQube 安装及使用

当有新的问题分配时,会进行邮件提醒

SonarQube 安装及使用

可以看到邮件下面有个问题的连接,跳转的前缀域名可以在 配置 里面进行配置

SonarQube 安装及使用

配置后发送邮件

SonarQube 安装及使用

分支扫描

SonarQube Community 版本不支持多分支扫描,所以可以使用 github 的 sonarqube-community-branch-plugin 插件

根据 SonarQube 版本选择插件版本

SonarQube 安装及使用

  1. 下载合适的 jar 包,并放置在你安装 SonarQube 的目录下 sonarqube/extensions/plugins

  2. 重启 SonarQube Service 服务
    SonarQube 安装及使用

  3. 切换你需要分析的分支并修改扫描项目下的 sonar-project.properties 文件

     sonar.projectKey=test
    
      # --- optional properties ---
    
      # defaults to project key
      sonar.projectName=test
      # defaults to 'not provided'
      sonar.projectVersion=1.0
    
      # Path is relative to the sonar-project.properties file. Defaults to .
      sonar.sources=./app,./config
    
      # Encoding of the source code. Default is default system encoding
      sonar.sourceEncoding=UTF-8
      #这个具体作用目前不太清除,官网也没写
      sonar.java.binaries=.
      # SonarQube 创建项目生成的令牌
      sonar.login=7eee3f6b73b5cab929c30f5bca7bc0a8bf84ec25
      # 项目所处分支(一般和 jenkins 结合,通过变量动态修改分支名)
      sonar.branch.name=release-1
  4. sonar-scanner 重新扫描

  5. 可在 SonarQube Web 页面看到新的分支信息
    SonarQube 安装及使用

多分支

SonarQube 的分支可分为

  1. 主分支:一般为 master
  2. 短期分支:短期分支的问题和长期分支相比是 增量 的数据
  3. 长期分支:长期维护的分支,如 release 和 develop 分支,问题数据 单独 存储

主分支如果不为 master,可修改主分支名字

SonarQube 安装及使用

同时可修改 长期分支 的分支匹配规则

SonarQube 安装及使用

Jenkins 使用 SonarQube

自行百度安装 Jenkins

安装 SonarQube Scanner 插件

Manage Jenkins -> Manage Plugins -> Sonarqube Scanner
SonarQube 安装及使用
安装完后重启 Jenkins

配置 SonarQube servers

Manage Jenkins -> Configure System -> SonarQube servers
SonarQube 安装及使用
填写自己的 SonarQube Web 地址,并创建一个 凭证

凭证添加

  1. SonarQube Web 使用管理员账户生成一个令牌 我的账户 -> 安全
    SonarQube 安装及使用

  2. 在 Jenkins 添加凭证
    SonarQube 安装及使用

配置 SonarQube Scanner

Manage Jenkins -> Global Tool Configuration -> SonarQube Scanner

SonarQube 安装及使用

创建 Jenkins 项目

  1. 新建一个 Item
    SonarQube 安装及使用
    选择一个自由风格的类型创建

  2. 创建构建信息
    基础信息
    SonarQube 安装及使用
    基础信息-git参数

    源码管理
    构建
    构建-参数

      sonar.projectKey=${JOB_BASE_NAME}
      sonar.projectName=${JOB_BASE_NAME}
      sonar.projectVersion=1.0
      sonar.sources=./app
      sonar.sourceEncoding=UTF-8
      sonar.java.binaries=.
      sonar.branch.name=${Branch}

    构建后操作
    构建后删除工作区,本案例只是单一的进行代码检测,不进行后续的操作,所以可以选择删除工作区

运行项目

SonarQube 安装及使用
SonarQube 安装及使用
如果是第一次运行,请务必选择 master 分支,不然会失败,因为 SonarQube Web 默认第一个分支就是 master
SonarQube 安装及使用
SonarQube 安装及使用

参考

www.cnblogs.com/ycyzharry/p/116890...
www.cnblogs.com/wangxu01/articles/...

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!