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
  1. 执行扫描
[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使用可参考)

posted @ 2020-12-09 21:44  yuhaohao  阅读(1042)  评论(0编辑  收藏  举报