作者:幻好

来源:恒生LIGHT云社区

SonarQube 是管理代码质量一个开放平台,可以快速的定位代码中潜在的或者明显的错误。 企业一般会搭建平台对项目的代码进行整体的校验,个人开发者也能在本机配置部署平台对相关代码进行分析。 本文将会介绍一下这个工具的安装、配置以及使用。

1.SonarQube 简介

1. sonar是什么

Sonar是一个用于代码质量管理的开源平台,用于管理代码的质量,通过插件形式可以支持二十几种语言的代码质量检测,通过多个维度的检查了快速定位代码中潜在的或者明显的错误。

1628131239149-63a877f1-bc4d-4218-a85b-338a163f9fc3.png

2. SonarQube与Sonar

  SonarQube是sonar的服务端,相当于一个web服务器中的tomcat,用来发布应用,在线浏览分析等。

2.安装配置

1.下载 SonarQube

  • sonarqubexxx.zip 并且解压即可,下载地址:http://www.sonarqube.org/downloads/
    • 1628406101422-6f7c2dc3-4919-4e15-8761-757e426ef378.png
    • 推荐安装 v7.8版本,更加稳定,且支持MySQL。
  • 下载完成后解压后,进入sonarqube-7.8\bin\windows-x86-64 目录,点击 StartSonar.bat 启动即可,如下:
  • SonarQube 服务启动后,默认访问端口http://127.0.0.1:9000/about

1628136590483-38983909-e169-441e-8201-c9a1ec25953c.png

2.配置数据库

  • 在mysql数据库新建一个库的名称为 sonar
  • 修改./conf/sonar.propertiesdb 信息:
sonar.jdbc.username=root
sonar.jdbc.password=root
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
  • 1628136743471-e934aea4-0bda-4911-a6cc-e7dba5f08c08.png
  • 配置完成,重启 SonarQube ,数据库中会自动建表
  • 1628137150719-51849ac2-0513-48ad-8c26-9108ac32eeec.png
  • 访问9000端口然后进行登录即可,默认创建的用户名和密码都是admin
  • 1628137228820-3e26d4d4-3793-4751-8b4d-71b132ee3f50.png
  • 登陆后,可在system选项卡看到系统信息
  • 1628137362778-6ebef1f4-6ee2-4d4c-9275-8ec77f9158fe.png

3.下载 Sonar-scanner

3.1 配置mysql信息

  • 下载解压后,需要配置数据库信息,打开sonar-scanner-3.3.0.1492-windows\conf\sonar-scanner.properties 文件

1628137661972-24b56b77-5b33-4609-aa6e-a0f5fe73299a.png

sonar.jdbc.username=root
sonar.jdbc.password=root
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

3.2 配置环境变量

  • 配置 Sonar-scanner 文件的 bin 目录地址,配置到环境变量中
  • 1628407128829-b2800734-78d2-4ee6-8806-e67a88748916.png
  • 配置完成后,在控制台验证,使用命令sonar-scanner
  • 1628407257113-dd58159a-1378-4a23-b3ab-a7405c29e9ec.png

4.中文汉化

  • 启动 SonarQube 服务后,进入目录Administration-Marketplace ,搜索插件Chinese Pack 并安装,即可汉化。
  • 由于安装 SonarQube 版本较低,可以前往 Github 上下载汉化插件包

4.基本使用

4.1配置代码规制

  • 在使用 Sonar 扫描代码之前,需要先配置好需要验证的规则,我们可以在质量配置菜单,配置不同代码的验证规则
    • 1628408989012-3694f3b0-73d9-438d-9647-d6e58f761491.png
    • 可以在右上角,自己创建或者导入备份的验证规则。
  • Java 可以配置以下相关插件,有大厂配置的一些配置

4.2创建扫描配置文件

  • 扫描项目前,需要在项目根目录创建扫描文件sonar-project.properties
# sonar 登录账号密码
sonar.login=admin      
sonar.password=admin

# must be unique in a given SonarQube instance
sonar.projectKey=SCM4.0-SCM-JAVA
# this is the name displayed in the SonarQube UI
# 项目名称,和版本号
sonar.projectName=SCM4.0-SCM
sonar.projectVersion=SCM4.0V202103.1.0.20210901
 
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# Since SonarQube 4.2, this property is optional if sonar.modules is set. 
# If not set, SonarQube starts looking for source code from the directory containing 
# the sonar-project.properties file.
# 项目源码路径,以及编译后的路径
sonar.sources=src/main/java
sonar.java.binaries=target/classes
 
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=GBK
  • 创建配置文件后,可以在目录中打开控制台,输入命令sonar-scanner ,对项目代码进行扫描,扫描完成后就能在后台查看

5.可能遇到的问题

  • SonarQube Unsupported JDBC driver provider: mysql
jvm 1    | WrapperSimpleApp: Encountered an error running main: org.sonar.process.MessageException: Unsupported JDBC driver provider: mysql
jvm 1    | org.sonar.process.MessageException: Unsupported JDBC driver provider: mysql
  • 原因是SonarQube 7.9以上版本已不再支持mysql
  • SonarQube启动报错:WrapperSimpleApp: Encountered an error running main: java.nio.file.AccessDeniedExcepti
WrapperSimpleApp: Encountered an error running main: java.nio.file.AccessDeniedException: /opt/sonarqube-6.7.6/temp/conf/es/elasticsearch.yml
    java.nio.file.AccessDeniedException: /opt/sonarqube-6.7.6/temp/conf/es/elasticsearch.yml
        at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)
        at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
        at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
        at sun.nio.fs.UnixFileSystemProvider.implDelete(UnixFileSystemProvider.java:244)
        at sun.nio.fs.AbstractFileSystemProvider.delete(AbstractFileSystemProvider.java:103)
        at java.nio.file.Files.delete(Files.java:1126)
        at org.sonar.process.FileUtils2$DeleteRecursivelyFileVisitor.visitFile(FileUtils2.java:186)
        at org.sonar.process.FileUtils2$DeleteRecursivelyFileVisitor.visitFile(FileUtils2.java:181)
        at java.nio.file.Files.walkFileTree(Files.java:2670)
        at java.nio.file.Files.walkFileTree(Files.java:2742)
        at org.sonar.process.FileUtils2.deleteDirectoryImpl(FileUtils2.java:143)
        at org.sonar.process.FileUtils2.deleteDirectory(FileUtils2.java:112)
        at org.sonar.application.AppFileSystem$CleanTempDirFileVisitor.visitFile(AppFileSystem.java:117)
        at org.sonar.application.AppFileSystem$CleanTempDirFileVisitor.visitFile(AppFileSystem.java:101)
        at java.nio.file.Files.walkFileTree(Files.java:2670)
        at org.sonar.application.AppFileSystem.createOrCleanTempDirectory(AppFileSystem.java:96)
        at org.sonar.application.AppFileSystem.reset(AppFileSystem.java:62)
        at org.sonar.application.App.start(App.java:55)
        at org.sonar.application.App.main(App.java:78)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.tanukisoftware.wrapper.WrapperSimpleApp.run(WrapperSimpleApp.java:240)
        at java.lang.Thread.run(Thread.java:748)
       <-- Wrapper Stopped  --> Wrapper Started as Daemon
    Launching a JVM...
    Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
      Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
  • 解决方法:删除sonarqube temp目录下的所有文件即可

有任何问题,欢迎私信交流。