SonarQube的使用
一.简单介绍
SonarQube是一种自动代码审查工具,用于检测代码中的错误,漏洞和代码异味。它可以与您现有的工作流程集成,以便在项目分支和拉取请求之间进行连续的代码检查,在很多企业中都会使用到,进行代码质量分析展示与管理。目前支持java,C#,C/C++,Python,PL/SQL,Cobol,JavaScrip,Groovy等二十几种编程语言的代码质量管理与检测。
另外SonarQube自动分析是常见的持续集成自动部署的环节。
二.部署安装
2.1 安装环境
这里说明下基础环境的版本
- SonarQube版本:7.7
- 操作系统:Centos7.x
- JDK 1.8
- 数据库:Mysql-5.6
2.2 SonarQube简单介绍
SonarQube整个架构包含4个组件:
1.SonarQube服务端:包含web服务界面、elasticsearch搜索引擎、计算引擎三个主要部分。
2.SonarQube数据库存储端。
3.SonarQube插件,包括语言、SCM、集成、身份验证和治理插件等。
4.SonarScanner客户端,开发人员或持续集成服务器通过SonarScanner进行项目代码分析。
对于开发过程常用的流程为:开发人员开发完代码后,提交到Git等代码版本管理工具,然后触发jenkins等持续集成工具进行代码分析检测,并将数据传到SonarQube服务端存储在数据库中,相应的代码问题则展示在web页面上,通知开发人员进行解决,以此循环来保证代码质量。
2.3 安装
2.3.1 安装java 11
[root@centos7 ~]# yum install java-11-openjdk.x86_64 java-11-openjdk-devel.x86_64 -y
2.3.2 安装postgresql数据库
安装
# 安装yum 仓库
[root@centos7 ~]# yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm -y
# 查看postgresql的版本
[root@centos7 ~]# yum list |grep postgresql
# 安装postgresql11版本
[root@centos7 ~]# yum install -y postgresql11-contrib postgresql11-server
初始化数据库
[root@centos7 ~]# /usr/pgsql-11/bin/postgresql-11-setup initdb
启动并设置开机启动
[root@centos7 ~]# systemctl start postgresql-11
[root@centos7 ~]# systemctl enable postgresql-11
登录postgresql设置密码
[root@centos7 ~]# su - postgres
psql
# 将密码设置为yuhaohao
ALTER USER postgres WITH PASSWORD 'yuhaohao';
# 输入exit退出postgres用户
exit
修改pg_hba.conf和postgresql.conf支持远程登录
修改pg_hba.conf
# 注意这里使用postgres用户执行
vi /var/lib/pgsql/11/data/pg_hba.conf
# 注意将三行带有replication注释掉,并新增一行运行其它主机登录的配置,具体修改如下:
local all all md5
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
host all all 0.0.0.0/0 md5
#local replication all peer
#host replication all 127.0.0.1/32 ident
#host replication all ::1/128 ident
修改postgresql.conf
vi /var/lib/pgsql/11/data/postgresql.conf
# 增加如下行
listen_addresses = '*'
退出postgres用户,重启服务
exit
[root@centos7 ~]# systemctl restart postgresql-11
这里数据库已经可以远程访问
创建数据库
[root@centos7 ~]# su - postgres
psql
create user sonar with password 'yuhaohao';
create database sonar owner sonar;
grant all on database sonar to sonar;
create schema my_schema;
exit
exit
创建sonarqube用户
[root@centos7 ~]# useradd sonarqube
2.3.3 优化系统参数
[root@centos7 ~]# sysctl -w vm.max_map_count=262144
[root@centos7 ~]# sysctl -w fs.file-max=65536
[root@centos7 ~]# ulimit -u 4096 sonarqube
[root@centos7 ~]# ulimit -n 65536 sonarqube
2.3.4 安装sonarqube
下载sonarqube并配置数据库
# 下载sonarqube
[root@centos7 ~]# wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-8.0.zip
# 将文件复制到用户目录下
[root@centos7 ~]# cp -p sonarqube-8.0.zip /home/sonarqube/
# 给下载的文件更换用户和属组
[root@centos7 ~]# chown -R sonarqube:sonarqube /home/sonarqube/sonarqube-8.0.zip
# 安装解压工具
[root@centos7 ~]# yum install -y unzip
[root@centos7 ~]# su - sonarqube
[sonarqube@centos7 ~]$ cd /home/sonarqube/
[sonarqube@centos7 sonarqube]$ unzip sonarqube-8.0.zip
[sonarqube@centos7 sonarqube]$ vi sonarqube-8.0/conf/sonar.properties
sonar.jdbc.username=sonar
sonar.jdbc.password=yuhaohao
sonar.jdbc.url=jdbc:postgresql://127.0.0.1/sonar
更改JDK的配置
[sonarqube@centos7 sonarqube]$ vi sonarqube-8.0/conf/wrapper.conf
wrapper.java.command=/usr/lib/jvm/java-11/bin/java
添加系统服务
#退出sonarqube用户
[sonarqube@centos7 sonarqube]$ exit
[root@centos7 ~]# ln -s /home/sonarqube/sonarqube-8.0/bin/linux-x86-64/sonar.sh /usr/bin/sonar
[root@centos7 ~]# vi /etc/init.d/sonar
# 下面是/etc/init.d/sonar内容
#!/bin/sh
#
# rc file for SonarQube
#
# chkconfig: 345 96 10
# description: SonarQube system (www.sonarsource.org)
#
### BEGIN INIT INFO
# Provides: sonar
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# Short-Description: SonarQube system (www.sonarsource.org)
# Description: SonarQube system (www.sonarsource.org)
### END INIT INFO
su sonarqube -c "/usr/bin/sonar $*"
[root@centos7 ~]# chmod 755 /etc/init.d/sonar
[root@centos7 ~]# chkconfig --add sonar
[root@centos7 ~]# service sonar start
# 启动后我们通过netstat查看服务对应端口是否启动
[root@centos7 ~]# netstat -tunlp |grep 9000
tcp6 0 0 :::9000 :::* LISTEN 5102/java
# 这里如果上面的服务端口没有启动,需要查看/home/sonarqube/sonarqube-8.0/logs目录下的日志信息进行分析定位
[root@centos7 ~]# ls /home/sonarqube/sonarqube-8.0/logs -al
total 156
drwxr-xr-x 2 sonarqube sonarqube 102 Jun 2 05:45 .
drwxr-xr-x 11 sonarqube sonarqube 141 Oct 15 2019 ..
-rw-r--r-- 1 sonarqube sonarqube 30048 Jun 2 05:55 access.log
-rw-r--r-- 1 sonarqube sonarqube 1309 Jun 2 05:45 ce.log
-rw-r--r-- 1 sonarqube sonarqube 23285 Jun 2 05:45 es.log
-rw-r--r-- 1 sonarqube sonarqube 88 Oct 15 2019 README.txt
-rw-r--r-- 1 sonarqube sonarqube 11835 Jun 2 05:45 sonar.log
-rw-r--r-- 1 sonarqube sonarqube 81238 Jun 2 05:45 web.log
安装中文插件
[root@centos7 ~]# su - sonarqube
[sonarqube@centos7 ~]$ wget https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-8.0/sonar-l10n-zh-plugin-8.0.jar -P sonarqube-8.0/extensions/plugins
[sonarqube@centos7 ~]$ exit
[root@centos7 ~]# chkconfig --add sonar
[root@centos7 ~]# service sonar restart
2.3.5 登录sonarqube
这里登录地址是http://${IP}:9000,初始账户名密码为:admin和admin
2.3.6 安装sonar-scanner
- 下载sonar-scanner
[root@centos7 ~]# wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.2.0.1873-linux.zip
- 安装sonar-scanner
[root@centos7 ~]# mv sonar-scanner-cli-4.2.0.1873-linux.zip /usr/local/
[root@centos7 ~]# cd /usr/local/ && unzip sonar-scanner-cli-4.2.0.1873-linux.zip
- 修改配置文件
[root@centos7 local]# vi sonar-scanner-cli-4.2.0.1873-linux/conf/sonar-scanner.properties
# 修改成以下内容
sonar.host.url=http://localhost:9000
sonar.sourceEncoding=UTF-8
- 配置环境变量
[root@centos7 ~]# vi /etc/profile
export SONARRUNNER_HOME=/usr/local/sonar-scanner-4.2.0.1873-linux
export PATH=$SONARRUNNER_HOME/bin:$PATH
# 配置生效
[root@centos7 ~]# source /etc/profile
- 查看版本
[root@centos7 ~]# sonar-scanner -v
INFO: Scanner configuration file: /usr/local/sonar-scanner-4.2.0.1873-linux/conf/sonar-scanner.properties
INFO: Project root configuration file: NONE
INFO: SonarQube Scanner 4.2.0.1873
INFO: Java 11.0.3 AdoptOpenJDK (64-bit)
INFO: Linux 3.10.0-862.el7.x86_64 amd64
2.3.7 具体使用
这里,我们下载一份Java的代码进行测试,代码路径为/home/test-service。
具体步骤如下:
1.代码根目录下新建配置文件sonar-project.properties
[root@centos7 ~]# cat /home/test-service/sonar-project.properties
# 项目的key
sonar.projectKey=test-service
# 项目的名字,这里可以随便写,是在sonar中显示
sonar.projectName=test-service
# 项目版本
sonar.projectVersion=1.0
#要扫描的代码路径,sonar-project.properties文件的相对路径。【配成.或src】
sonar.sources=.
# 编码格式
sonar.sourceEncoding=UTF-8
# java语言
sonar.language=java
sonar.java.binaries=./test-api-gateway/src
- 执行扫描
[root@centos7 ~]# cd /home/test-service/
# 在代码根目录下执行sonar-scanner
[root@centos7 test-service]# sonar-scanner
INFO: Scanner configuration file: /usr/local/sonar-scanner-4.2.0.1873-linux/conf/sonar-scanner.properties
INFO: Project root configuration file: /home/test-service/sonar-project.properties
INFO: SonarQube Scanner 4.2.0.1873
INFO: Java 11.0.3 AdoptOpenJDK (64-bit)
INFO: Linux 3.10.0-862.el7.x86_64 amd64
INFO: User cache: /root/.sonar/cache
INFO: SonarQube server 8.0.0
INFO: Default locale: "en_US", source code encoding: "UTF-8"
INFO: Load global settings
INFO: Load global settings (done) | time=85ms
INFO: Server id: 5AB7DE06-AXJ0a4iQdCx2Ays4Yl2O
INFO: User cache: /root/.sonar/cache
INFO: Load/download plugins
.....................
INFO: ------------------------------------------------------------------------
INFO: EXECUTION SUCCESS
INFO: ------------------------------------------------------------------------
INFO: Total time: 1:11.022s
INFO: Final Memory: 17M/60M
INFO: ------------------------------------------------------------------------
3.查看扫描结果
这里登录sonarqube,可以查看具体的扫描详情:
参考文章:
1.http://blog.luamas.com/2019/08/28/INSTALLATION-SONARQUBE
2.http://blog.luamas.com/2018/08/29/JENKINS-INTEGRATION-SONAR-SCANNER(具体配置jenkins使用可参考)