认识SonarQube

原文链接:https://github.com/bingoohuang/blog/issues/67

认识SonarQube

SonarQube 是一个开源的代码分析平台, 用来持续分析和评测项目源代码的质量。 通过SonarQube团队项目代码质量可以检测出项目中重复代码, 潜在bug, 代码风格问题,缺乏单元测试等问题, 并通过一个web ui展示出来。

架构

  • 一台SonarQube Server启动3个主要过程:

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

    • 基于Elasticsearch的Search Server从UI进行后退搜索

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

  • 一个SonarQube数据库要存储:

    • SonarQube实例的配置(安全性,插件设置等)

    • 项目,视图等的质量快照。

  • 服务器上安装了多个SonarQube插件,可能包括语言,SCM,集成,身份验证和管理插件

  • 在构建/持续集成服务器上运行一个或多个SonarScanner,以分析项目

版本

开源社区版、开发版、企业版、数据中心版

用Sonar能够实现什么?

  • 技术债务(sonar根据”规则”扫描出不符合规则的代码)
  • 覆盖率(单元测试覆盖率)
  • 重复(重复的代码, 有利于提醒封装)
  • 结构

SonarQube 在进行代码质量管理时,会从下图所示的七个纬度来分析项目的质量。

image.png

为什么它那么重要

SonarQube 为组织提供了一个集中的位置来管理和跟踪多个项目代码中的问题。它还可以把持续的检查与质量门限相结合。一旦项目分析过一次以后,更进一步的分析会参考软件最新的修改来更新原始的统计信息,以反映最新的变化。这些跟踪可以让用户看到问题解决的程度和速度。这与 “尽早发布并经常发布”不谋而合。

另外,SonarQube 可使用 可持续集成流程,比如像 Hudson 和 Jenkins 这样的工具。这个质量门限可以很好的反映代码的整体运行状况,并且通过 Jenkins 等集成工具,在发布代码到生产环境时担任一个重要的角色。

本着 DevOps 的精神, SonarQube 可以量化代码质量,来达到组织内部的要求。为了加快代码生产和发布的周期,组织必须意识到它们自己的技术债务和软件问题。通过发现这些信息, SonarQube 可以帮助组织更快的生成高质量的软件。

组件组成

  • sonarqube server : 他有三个程序分别是 webserver(配置和管理sonar) searchserver(搜索结果返回给sonarUI) ComplateEngineserver(计算服务 将分析结果入库)。
  • sonarqube db : 数据库 存放配置。
  • sonarqube plugins: 插件增加功能。
  • sonar-scanner : 代码扫描工具 可以有多个。

image.png

SonarQube各组件的工作流程

image.png

主要功能如下:

  1. 开发者在IDE中编码,并使用SonarLint执行本地代码分析;
  2. 开发者向软件配置管理平台(Git,SVN,TFVC等)提交代码;
  3. 代码提交触发持续集成平台自动构建、使用SonarQube Scanner执行分析;
  4. 分析报告被发送到SonarQube Server进行处理;
  5. 处理好的报告生成对应可视化的视图,并将数据保持到数据库;
  6. 开发者可以在页面通过查看,评论,解决问题来管理和减少技术债;
  7. SonarQube导出结果到其他需要的服务

SonarQube中的一些重要概念

指标:SonarQube中的主要指标有可靠性,安全性,可维护性,测试覆盖率,复杂度,重复代码,规模(大小),问题等。

  • 代码规则:在SonarQube中,通过插件提供的规则,在执行代码分析时对代码进行分析并生成问题。由于规则中定义了修复问题话费的成本(时间),解决问题的代价以及技术债可以通过这些问题进行计算。规则一般有三种类型:可靠性(Bug),可维护性(坏味道),安全性(漏洞)。
  • 质量配置:质量配置提供了根据需求配置一组代码规则的能力,这组代码规则将被用于分析某些指定的组件(项目)。例如,项目A对应什么编程语言,适用于那些代码规则等等。
  • 质量阈:质量阈是一系列对项目指标进行度量的条件。项目必须达到所有条件才能算整体上通过了质量阈。例如,配置质量阈为新增Bugs大于10,新代码可靠率低于评级A,新代码可维护率低于评级B,那分析完成后若指标符合这些标准,则代码质量将被认为是不合格的。

SonarQube Server处理分析报告时,根据质量配置中的代码规则进行匹配,从而生成具体的指标数据,然后根据质量阈中的阈值判断出项目的代码是否合格。

maven配置

详见

<settings>
    <pluginGroups>
        <pluginGroup>org.sonarsource.scanner.maven</pluginGroup>
    </pluginGroups>
    <profiles>
        <profile>
            <id>sonar</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <!-- Optional URL to server. Default value is http://localhost:9000 -->
                <sonar.host.url>
                  http://localhost:9000
                </sonar.host.url>
            </properties>
        </profile>
     </profiles>
</settings>

在项目pom.xml中添加maven插件,以及排除文件

 <properties>
    <sonar.exclusions>**/persistence/generated/*.java</sonar.exclusions>
  </properties>

  <build>
    <plugins>
        <plugin>
          <groupId>org.sonarsource.scanner.maven</groupId>
          <artifactId>sonar-maven-plugin</artifactId>
          <version>3.6.0.1398</version>
        </plugin>
    </plugins>
  </build>

运行mvn clean verify sonar:sonar
或者不修改项目pom配置,直接运行mvn clean verify org.sonarsource.scanner.maven:sonar-maven-plugin:3.6.0.1398:sonar

插件安装

SonarQube有一个强大的插件机制。以安装汉化插件为例——

Administration->Marketplace->Plugins,搜索“chinese pack”,安装

image

点击Install按钮后,将会弹出重启SonarQube的提示,点击即可重启。重启后,可看到类似如下的界面

image

类似的方式,也可为SonarQube安装其他插件。

image

image.png

IDE插件

sonarlint

插件SonarLint仅存在于IDE(IntelliJ,Eclipse和Visual Studio)中

IDE启动命令

在IDEA研发环境中,添加Maven启动命令

org.sonarsource.scanner.maven:sonar-maven-plugin:3.4.0.905:sonar

如截图:

posted @ 2020-04-13 21:08  ioufev  阅读(1088)  评论(0)    收藏  举报