1 什么是sonarqube

sonarQube是一个开源的代码质量管理系统,用于检测代码中的错误、bug,它可以与jenkins集成,进行自动化代码质量扫描

官网:https://www.sonarqube.org/

Jenkins集成SonarQube_mysql

2 使用sonarqube的前提

  • sonarqube基于java开发所以需要安装JDK1.8版本。
  • SonarQube需要依赖MySQL数据库,至少5.6以上版本。
  • SonarQube 的小型实例至少需要4G内存,如果大型实例需要16GB

3 sonarqube环境安装准备

防火墙配置
systemctl stop firewalld
systemctl enable firewalld

安装依赖
yum -y install git java unzip wget -y

安装mysql
wget https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.6-community-el7-x86_64/mysql-community-client-5.6.45-2.el7.x86_64.rpm
wget https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.6-community-el7-x86_64/mysql-community-common-5.6.45-2.el7.x86_64.rpm
wget https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.6-community-el7-x86_64/mysql-community-libs-5.6.45-2.el7.x86_64.rpm
wget https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.6-community-el7-x86_64/mysql-community-server-5.6.45-2.el7.x86_64.rpm 

yum localinstall -y mysql-community-*

启动mysql
systemctl start mysqld

配置数据库
为数据库配置密码
mysqladmin password 123456
创建sonar库,设定字符集为utf8
mysql -uroot -p123456 -e "create database sonar default character set utf8;"
mysql -uroot -p123456 -e "show databases;"

4 安装sonarqube

下载并解压
下载地址https://www.sonarqube.org/downloads/
新版的SonarQube(7.9+)只支持以下数据库:
Microsoft SQL Server、Oracle、PostgreSQL、H2 (默认的嵌入式数据库)
不再支持MySQL
unzip sonarqube-7.0.zip -d /app/module/
ln -s /app/module/sonarqube-7.0/ /app/module/sonarqube

修改sonarqube数据库配置文件
vim /app/module/sonarqube/conf/sonar.properties
sonar.jdbc.username=root
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

5 启动sonarqube

启动sonarqube服务需要以普通用户运行
原因是sonarqube依赖es服务,es服务不允许以root运行
useradd sonaradmin
chown -R sonaradmin.sonaradmin /app/module/sonarqube-7.0/
su - sonaradmin -c "/app/module/sonarqube/bin/linux-x86-64/sonar.sh start"

6 访问sonarqube

http://192.168.137.130:9000/
点击登录,账号密码admin/admin

sonar初始化操作,配置认证Token,使用Token访问无需密码

Jenkins集成SonarQube_mysql_02

Jenkins集成SonarQube_mysql_03

Jenkins集成SonarQube_bc_04

使用sonarqube分析java代码,直接通过mvn工具
mvn sonar:sonar \
  -Dsonar.host.url=http://192.168.137.130:9000 \
  -Dsonar.login=d6cfa716cbebcc03c51f8306f86ced69150e2295

使用sonarqube分析html代码,需要sonar-scanner工具
sonar-scanner \
  -Dsonar.projectKey=html \
  -Dsonar.sources=. \
  -Dsonar.host.url=http://192.168.137.130:9000 \
  -Dsonar.login=d6cfa716cbebcc03c51f8306f86ced69150e2295 

7 sonarqube插件管理

7.1 默认概述

Sonarqube默认已经安装了 C Java Python Php 等代码的质量分析工具;那我们为什么还需要安装插件?因为我们还需要检测 html等类型代码,而默认插件没有,所以需要安装;以便将代码检测的更加完善;

当前安装的插件支持那些

Jenkins集成SonarQube_mysql_05

7.2 联网安装插件

联网安装插件比较简单,仅需要上应用市场搜索插件名称即可,如下以安装中文语言包插件为例;点击配置> 应用市场--> 搜索框chinese,出现一个Chinese Pack,然后点击install安装好的插件会存储至/app/module/sonarqube/extensions/plugins/xx.jar

Jenkins集成SonarQube_推送_06

7.3 离线安装插件

由于 SonarQube 需要安装很多的插件,并且插件安装需要很长的时间;所以我们可以通过导入的方式来完成插件的安装;注意导入后需要重启 Sonarqube

rm -rf /app/module/sonarqube/extensions/plugins/
tar -xf sonar_plugins.tar.gz -C /app/module/sonarqube/extensions
chown -R sonaradmin.sonaradmin /app/module/sonarqube/extensions/plugins/
su - sonaradmin -c "/app/module/sonarqube/bin/linux-x86-64/sonar.sh restart"

8 sonarqube代码检测

前面已经将sonarqube服务以及插件安装完成,那么接下来只需要将代码推送至 sonarqube 进行分析即可。

8.1 Java项目分析

推送代码

进入项目目录,使用mvn命令将代码直接推送至sonarqube分析
mvn sonar:sonar \
  -Dsonar.host.url=http://192.168.137.130:9000 \
  -Dsonar.login=d6cfa716cbebcc03c51f8306f86ced69150e2295 \
  -Dsonar.exclusions=target/**

查看项目分析结果

Jenkins集成SonarQube_mysql_07

报错处理

Jenkins集成SonarQube_bc_08

在pom.xml追加内容
<build>
  <plugins>
    <plugin>
      <groupId>org.sonarsource.scanner.maven</groupId>
      <artifactId>sonar-maven-plugin</artifactId>
      <version>3.11.0.3922</version>
    </plugin>
  </plugins>
</build>

Jenkins集成SonarQube_mysql_09

8.2 html项目分析

Sonarqube 分析 Html、php、go 项目;需要借助sonar-scanner客户端工具来完成代码的分析;需要在项目所在的主机安装sonar-scanner

安装sonar-scanner

安装 sonar-scanner 命令
https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/
unzip sonar-scanner-cli-4.0.0.1744-linux.zip -d /app/module/
ln -s /app/module/sonar-scanner-4.0.0.1744-linux/ /app/module/sonar-scanner

推送代码

进入项目目录,使用sonar-scanner工具将代码推送到sonarqube服务端进行分析
/app/module/sonar-scanner/bin/sonar-scanner \
  -Dsonar.projectKey=html \
  -Dsonar.sources=. \
  -Dsonar.host.url=http://192.168.137.130:9000 \
  -Dsonar.login=d6cfa716cbebcc03c51f8306f86ced69150e2295

查看项目分析结果

Jenkins集成SonarQube_mysql_10

报错处理

Jenkins集成SonarQube_bc_11

安装nodejs
tar -xf node-v16.19.1-linux-x64.tar.gz -C /app/module/
cd /app/module/
ln -s node-v16.19.1-linux-x64/ nodejs

vim /etc/profile
export NODEJS_HOME=/app/module/nodejs
export PATH=$PATH:$NODEJS_HOME/bin

source /etc/profile

9 Jenkins集成sonarqube

Jenkins 需要知道 Sonarqube 服务;以便能将代码推送指定服务节点;

Jenkins 需要知道 Sonar-Scanner 客户端工具,以便能正常调用

9.1 集成sonarqube

1 安装插件

需要安装SonarQube Scanner插件

2 添加凭据

Jenkins集成SonarQube_bc_12

3 配置sonarqube服务端

Name 可以随意填写

URL 添加 SonarQube服务端地址;确保Jenkins能正常访问;

Jenkins集成SonarQube_推送_13

9.2 集成Sonar-Scanner

Name 可以随意填写,但最好有规范

SONAR_RUNNER_HOME 填写 sonar-scanner 在Jenkins本地路径

Jenkins集成SonarQube_bc_14

9.3 Maven质检方式

Scanner不支持java代码质检

Jenkins集成SonarQube_mysql_15

需要调用Maven或者直接mvn绝对路径执行

Jenkins集成SonarQube_推送_16

查看项目分析结果

Jenkins集成SonarQube_mysql_17

9.4 Scanner质检方式

# must be unique in a given SonarQube instance
sonar.projectKey=web_demo
# this is the name and version displayed in the SonarQube UI. Was mandatory prior to SonarQube 6.1.
sonar.projectName=web_demo
sonar.projectVersion=1.0
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
# This property is optional if sonar.modules is set.
sonar.sources=.
sonar.exclusions=**/test/**,**/target/**
sonar.java.source=1.8
sonar.java.target=1.8
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8

Jenkins集成SonarQube_mysql_18

查看项目分析结果

Jenkins集成SonarQube_bc_19