admin 管理员组

文章数量: 887033

SonarQube是一种自动代码审查工具,用于检测代码中的错误,漏洞和代码异味。它可以与您现有的工作流程集成,以便在项目分支和拉取请求之间进行连续的代码检查。

官方网站:

https://www.sonarqube/

1. 使用前提条件

运行SonarQube的唯一先决条件是在您的计算机上安装Java(Oracle JRE 8或OpenJDK 8)。

注意: 在Mac OS X上,强烈建议安装Oracle JDK 8而不是相应的Oracle JRE,因为JRE安装未正确完全设置Java环境。

1.1 硬件要求

  1. SonarQube服务器的小型(个人或小团队)实例需要至少2GB的RAM才能有效运行,并且1GB的可用RAM用于操作系统。如果要为大型团队或Enterprise安装实例,请考虑以下其他建议。
  2. 您需要的磁盘空间量取决于您使用SonarQube分析的代码量。例如,SonarClube的公共实例SonarCloud拥有超过3.5亿行代码,有5年的历史。SonarCloud目前在集群Amazon EC2 m5.large实例上运行,每个节点分配50 Gb的驱动器空间。它处理19,000多个项目,大约有1400万个未解决的问题。SonarCloud在PostgreSQL 9.5上运行,它为数据库使用了大约250Gb的磁盘空间。
  3. SonarQube必须安装在具有出色读写性能的硬盘上。最重要的是,“data”文件夹包含Elasticsearch索引,当服务器启动并运行时,将在其上完成大量I / O. 因此,良好的读写硬盘性能将对整个SonarQube服务器性能产生很大影响。

1.2 企业硬件建议

对于SonarQube的大型团队或企业级安装,需要额外的硬件。在企业级别,监控SonarQube实例/实例管理/ java-process-memory是必不可少的,并且应该随着实例的增长引导进一步的硬件升级。起始配置应至少包括:

  • 8个核心,允许主SonarQube平台与多个计算引擎工作者一起运行
  • 16GB RAM有关数据库和ElasticSearch的其他要求和建议,请参阅硬件建议/要求/硬件建议。

1.3 支持的平台

SonarQube Java分析器能够分析任何类型的Java源文件,无论它们遵循的Java版本如何。

但SonarQube分析和SonarQube服务器需要特定版本的JVM。

 参考资料: 

Prerequisites and overview

版本注意:jdk8支持的sonarqube版本最高是7.8,而从7.9版本开始都是要求jdk11了,下载的话需要注意版本的对应关系,SonarQube 7.6, 对应 JDK8,MySQL 版本>=5.6 && <8.0。sonarqube从7.8起,不再支持mysql。SonarQube 的社区版是免费的,其他版本是收费的!!!

2. 安装

2.1下载sonarqube的zip包

SonarQube官方下载页面Download | SonarQube | Sonar,这里我们下载免费的社区版

 SonarQube 7.9开始需要Java 11且不支持mysql了,所以这里我们选择7.0版本进行下载

我们把页面拉到最下面,选择Historical Downloads

我的jdk是1.8,mysql数据库,所以下载的版本是:7.0版本,zip安装包下载地址:

​https://binaries.sonarsource/Distribution/sonarqube/sonarqube-7.0.zip

2.2下载sonarqube的汉化包

由于低版本SonarQube自带的插件商店没有对应的汉化版本,这里我们自己下载汉化插件。

Releases · xuhuisheng/sonar-l10n-zh · GitHub

下载汉化包地址:https://github/xuhuisheng/sonar-l10n-zh/releases

下载完成之后,我们将这个jar包放入SonarQube的安装目录下的extensions\plugins文件夹中即可

 2.3如果需要mysql可以下载对应版本的mysql

MySQL :: Download MySQL Community Server (Archived Versions)

 2.4数据库配置

root登录数据库,执行以下命令:

创建sonar数据库
创建sonar 用户
给sonar 赋予权限
密码是sonar
刷新权限

CREATE DATABASE sonar CHARACTER SET utf8 COLLATE utf8_general_ci;

CREATE USER 'sonar' IDENTIFIED BY 'sonar';

GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';

GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';

FLUSH PRIVILEGES;

 2.5sonar配置

打开sonar/conf目录下的sonar.properties,加入以下配置项:

#数据库连接url
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
#数据库用户
sonar.jdbc.username=sonar
#数据库密码
sonar.jdbc.password=sonar
sonar.sorceEncoding=UTF-8
sonar.login=admin
sonar.password=admin

url是数据库连接地址,username是数据库用户名,jdbc.password是数据库密码,login是sonarqube的登录名,sonar.password是sonarqube的密码

sonar默认的登陆名和密码都是admin,默认端口是http://localhost:9000/

如果想修改端口:

2.5配置汉化包        

        将下载的汉化jar放到extensions\plugins路径:

2.6启动sonarqube服务

我解压缩sonarqube-7.0.zip到这个目录 D:\software\sonarqube-7.0\bin\windows-x86-64

我使用的是windows的64位系统,则打开​​bin\windows-x86-64\StartSonar.bat,看到如下代表启动成功。

 注意:启动sonar服务的同时,也启动了jdk 的Java服务,如果提示如下报错,必须关闭所有的Java服务

(执行StartSonar.bat脚本启动SonarQube后,如果不小心关闭了控制台,其实这个时候SonarQube并没有被关闭,后台还有进程在,所以下次启动时会报错,这个时候就要手动杀掉进程了。)

 2.7登录平台

访问地址:http://localhost:9000/

 若启动报错可检查logs文件下的日志,检查顺序:sonar.log -> es.log -> web.log

2.8创建项目

访问sonar首页,按照提示一步步来即可

 设置令牌

 这个时候我们要把这个令牌复制下来,因为后面就看不到了!

2.9使用

三种方式来使用SonarQube的代码扫描功能:

① Maven方式执行代码检测

② SonarScanner方式执行代码检测

③ 集成Jenkins执行代码检测

1.集成maven执行代码扫描

创建完项目后,我们选择maven方式构建,即可看到SonarQube给我们提供的maven扫描命令:

mvn sonar:sonar -Dsonar.projectKey=test -Dsonar.host.url=http://127.0.0.1:9000   -Dsonar.login=生成的令牌

进入到要扫描的代码目录,执行上面的maven命令即可,执行完毕后在SonarQube页面即可看到扫描结果。

注:上面的命令中有些是固定的信息,如果每次执行扫描都需要输入则显的很麻烦,这里我们可以将某些信息配置到maven的setting.xml中:

<profile>
        <id>sonar</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
        <!-- Example for MySQL-->
            <sonar.jdbc.url>jdbc:mysql://127.0.0.1:3306/sonar?useUnicode=true&amp;characterEncoding=utf8</sonar.jdbc.url>
            <sonar.jdbc.username>sonar</sonar.jdbc.username>
            <sonar.jdbc.password>sonar</sonar.jdbc.password>
            <sonar.host.url>http://127.0.0.1:9000</sonar.host.url>

            <sonar.login>admin</sonar.login>
            <sonar.password>admin</sonar.password>
        </properties>
</profile>

或者:

<profile>
  <id>sonar</id>
  <activation>
    <activeByDefault>true</activeByDefault>
  </activation>
  <properties>
    <sonar.host.url>http://127.0.0.1:9000</sonar.host.url>
    <sonar.login>7a13de184fe9d79c59e24062d0065bd87b7064e9</sonar.login>
  </properties>
</profile>

以后直接执行mvn sonar:sonar -Dsonar.projectKey=test即可。甚至mvn sonar:sonar都可以,SonarQube会自动以maven的坐标为项目key去创建项目。

2.通过SonarScanner执行代码扫描

SonarQube提供了SonarScanner组件来帮助我们执行扫描,首先下载:

https://docs.sonarqube/latest/analysis/scan/sonarscanner/

下载之后是个压缩包,解压即可,为了方便使用,我们可以将解压后的目录下的bin目录加入到环境变量中,这样可以直接使用sonar-scanner命令了。

新增变量: SONAR_SCANNER_HOME = D:\software\sonar-scanner-cli-4.1.0.1829-windows

修改Path变量:增添 %SONAR_SCANNER_HOME%\bin\

打开SonarScanner的配置文件conf\sonar-scanner.properties,做如下修改:

 进入到待扫描的项目目录下,新建sonar-project.properties文件,内容如下:

sonar.projectKey=test
sonar.projectName=test
#sonar.projectVersion=1.0
#sonar.sources=./src
sonar.sourceEncoding=UTF-8
#sonar.language=java
sonar.java.binaries=.

然后再命令行执行sonar-scanner即可。

3.集成Jenkins执行代码扫描

Jenkins作为一个开源的、提供友好操作界面的持续集成(CI)工具,广受大家的喜爱,Jenkins提供了SonarQube扫描插件可以方便的让我们直接扫描代码仓库中的代码质量,而前两种方式更偏向于开发人员本地去做,更依赖开发人员的自觉性,而使用Jenkins的方式则更方便对整个团队进行 Code Review,更方便的进行规范管理。

1.下载jenkins (war包或者msi均可)(安装过程省略)

War Jenkins Packages

①.首先需要安装SonarQube Scanner插件,系统管理 > 插件管理,搜索SonarQube Scanner插件并安装;安装后进入到系统管理 > 系统配置 > SonarQube servers,添加SonarQube服务器

  

安装后进入到系统管理 > 系统配置 > SonarQube servers,添加SonarQube服务器

 

第一次配置是不能选择Secert Text。可以先保存,之后再过来修改,点击添加按钮添加Jenkins:

 将sonarqube生成的token设置到Secret中。类型选择Secert Text。

3.1Jenkins集成sonarqube scanner

配置SonarQube Scanner

 先配置好JDK

 在全局工具管理中配制SonarQube Scanner:

Jenkins在项目中引用sonarqube scanner:

新建一个项目

 

如果不创建空间的话,等于是没有空间放代码,可以先build一次:

构建: 

sonarprojectName=SfOB NAME
sonar.projectKey=SJOB_NAME)
sonar.sources=/cvrvideo
sonar;java.binaries=./cvrvideo/target/classes

 

 可以点击链接,然后查看扫描的结果。

3.2jenkins以maven的方式集成sonarqube scanner

配置一下maven

构建项目: 

 

clean
verify
sonar:sonar
-Dsonar.host.url=http://192.168xx.xxx:9000
-Dsonar.login=#填写自行生成的token

本文标签: 系统安装 Windows sonarqube