SonarQube部署及代码质量扫描入门教程

  • 2019 年 10 月 3 日
  • 筆記

一、前言

1、本文主要内容

  • CentOS7下SonarQube部署
  • Maven扫描Java项目并将扫描结果提交到SonarQube Server
  • SonarQube扫描报表介绍

2、环境信息

工具/环境

版本

CentOS

CentOS 7.6(IP:192.168.88.45)

SonarQube

7.5

JDK

1.8.0

MySQL

5.7

3、准备工作

  • 安装JDK1.8

参考:https://ken.io/note/centos-java-setup

  • 安装MySQL

参考:https://ken.io/note/centos-mysql57-setup

二、部署SonarQube

1、基础准备

  • 安装必要的软件包
yum install -y wget zip unzip

  • 调整系统参数
sysctl -w  vm.max_map_count=262144  sysctl -w fs.file-max=65536  ulimit -u 4096 sonarqube  ulimit -n 65536 sonarqube  

  

  • 创建专用账号sonar
#创建账号并授权  useradd sonar  passwd sonar    #授予sudo权限  visudo  #在文件末尾增加  sonar    ALL=(ALL)       ALL  

  

sonar 7.5版本必须在非root账号下启动

2、准备数据库及账号

#进入mysql-shell  mysql -u root -p    #新建用户  CREATE USER 'sonar'@'localhost' IDENTIFIED BY 'Sonar@2019';  CREATE USER 'sonar'@'%' IDENTIFIED BY 'Sonar@2019';    #新建数据库  CREATE DATABASE sonar;    #赋予数据库访问权限  GRANT ALL PRIVILEGES ON sonar.* TO 'sonar'@'localhost';  GRANT ALL PRIVILEGES ON sonar.* TO 'sonar'@'%';    #刷新权限  FLUSH PRIVILEGES;    #退出  quit;  

  

3、下载

  • 准备软件以及数据目录
mkdir -p /usr/sonar  mkdir -p /sonar/data  mkdir -p /sonar/temp  

  

  • 下载
#进入下载目录  cd /home/downloads    #下载软件包  sudo wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.5.zip    #解压  sudo unzip sonarqube-7.5.zip -d /usr/sonar/  

  

  • 授权
#授予相关目录权限  chown -R sonar:sonar /usr/sonar  chown -R sonar:sonar /sonar  

  

4、配置环境变量

#修改profile文件  sudo vi /etc/profile    #在文件末尾增加变量:SONAR_HOME  export SONAR_HOME=/usr/sonar/sonarqube-7.5    #使变量生效  source /etc/profile    #测试  echo $SONAR_HOME  

  

5、配置Sonar

#修改配置文件  sudo vi $SONAR_HOME/conf/sonar.properties    #在配置文件开头增加以下配置    #数据库配置  sonar.jdbc.username=sonar  sonar.jdbc.password=Sonar@2019  sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useConfigs=maxPerformance&rewriteBatchedStatements=true&characterEncoding=utf8&useUnicode=true&serverTimezone=GMT%2B08:00    #文件配置  sonar.path.data=/sonar/data  sonar.path.temp=/sonar/temp    #Web配置  sonar.web.host=0.0.0.0  sonar.web.port=9000  sonar.web.context=/  

  

这里要强调的是,端口号需要>1000,因为sonar启动是使用的非root账号,默认是不能使用1000以下的端口的,否则会启动失败

6、开放端口

sudo firewall-cmd --add-port=9000/tcp --permanent  sudo firewall-cmd --reload  

  

7、启动Sonar

#切换到sonar账号  su sonar    #启动  sh $SONAR_HOME/bin/linux-x86-64/sonar.sh start    #启动完成会看到以下输出  Starting SonarQube...  Started SonarQube.    #如果未完成启动可以使用console命令查看启动过程中的问题  sh $SONAR_HOME/bin/linux-x86-64/sonar.sh console  

  

sonar支持的启动参数: console | start | stop | restart | status | dump

如果启动完成,但是依然不能访问,可以通过以下命令查看启动日志

cat $SONAR_HOME/logs/web.log  

  

成功启动后,可以访问 http://192.168.88.45:9000

这时候SonarQube会进行初始化,比如:初始化数据库。初始化完成后将看到首页

三、扫描项目示例

1、初始化Token

通过默认账号密码 admin,admin登录SonarQube,这时候会弹出引导

输入TokenName,然后点击Generate就会生成token,点击Continue 然后选择Java-Maven项目,这时候

token创建后,一旦窗口关闭就不能查询,只能再次创建,所以我们要先将token复制下来保存。

token创建:http://192.168.88.45:9000/account/security/

2、项目准备

本次我们以Java项目作为示例进行扫描,本机需要配置好了Java&Maven环境 参考:https://ken.io/note/java-quickstart-sde

如果已有Java项目可以忽略这一步

  • 创建项目
mvn archetype:generate   -DarchetypeGroupId=org.apache.maven.archetypes   -DarchetypeArtifactId=maven-archetype-quickstart   -DremoteRepositories=http://maven.aliyun.com/nexus/content/groups/public   -DgroupId=io.ken.sonar   -DartifactId=sonardemo   -Dpackage=io.ken.sonar   -Dversion=1.0  

  

  • 修改pom.xml

增加build节点,指定默认build动作以及JDK版本

<build>      <defaultGoal>compile</defaultGoal>      <plugins>        <plugin>          <groupId>org.apache.maven.plugins</groupId>          <artifactId>maven-compiler-plugin</artifactId>          <version>3.8.1</version>          <configuration>            <source>1.8</source>            <target>1.8</target>          </configuration>        </plugin>      </plugins>  </build>  

  

3、扫描并提交

#进入项目根目录  cd sonardemo    #执行扫描  mvn sonar:sonar     -Dsonar.host.url=http://192.168.88.45:9000     -Dsonar.login=8e359701283af794e8b77f3029863a1be7ad8ee4  

  

扫描完成访问:http://192.168.88.45:9000即可看到扫描结果

点击项目名字可以查看扫描详情

4、报表指标简介

指标

简介

Bugs

bug个数及评分

Vulnerabilities

安全漏洞个数及评分

Debt

债务(代码问题)持续时间

Code Smells

轻微问题:代码风格等等

Coverage

单元测试覆盖率

Duplications

代码重复率

Duplicated Blocks

代码重复块数

四、备注

1、附录


本文首发于我的独立博客:https://ken.io/note/sonarqube-install-and-code-scan-tutorial