一、SonarQube简介
SonarQube是一种自动代码审查工具,用于检测代码中的错误,漏洞和代码异味。它可以与您现有的工作流程集成,以便在项目分支和拉取请求之间进行连续的代码检查。
二、SonarQube四个组件:
- Web Server
- SonarQube Database
版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作! - SonarQube Plugin
- Code anal
版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作! ysis Scanners

SonarQube支持分析的语言有如下27种

三、代码质量七宗罪
如果被SonarQube扫描有问题的代码,基本上都符合以下标准。
1.编码规范:是否遵循了编码规范,遵循了最佳实践。
2.潜在的BUG:可能在最坏的情况下出现问题的代码,以及存在安全漏洞的代码。
3.文档和注释:过少(缺少必要信息)、过多(没有信息量)、过时的文档或注释。
4.重复代码:违反了Don’tRepeat Yourself原则。
5.复杂度:代码结构太复杂(如圈复杂度高),难以理解、测试和维护。
6.测试覆盖率:编写单元测试,特别是针对复杂代码的测试覆盖是否足够。
7.设计与架构:是否高内聚、低耦合,依赖最少。
四、SonarQube先决条件
硬件需求
1.SonarQube服务于小型企业至少需要2GB的RAM才能运行。
2.磁盘空间取决于你使用SonarQube分析的代码量。
3.SonarQube必须安装在读写性能较好的磁盘上,最重要的是存储数据的目录中包含了Elasticsearch的索引,当服务器启动并运行的时候,将会在该索引上进行大量I/O操作,因此读写性能较高的磁盘将对SonarQube分析速率较好。
4.SonarQube不支持32位操作系统。
JVM需求
SonarQube目前只支持OpenJDK11或者Oracle JRE11版本,代码扫描仪支持8或者11的版本。

数据库需求

系统需求
如果你运行在LInux服务器上,必须确保以下指标。
- vm.max_map_count 要大于或等于262144
- fs.file-max 要大于或等于65536
- 运行SonarQube的用户至少可以打开65536个文件描述符
- 运行SonarQube的用户可以打开至少4096个线程
部署环境

五、调整系统指标
1.修改内核指标
sysctl -w vm.max_map_count=262144
sysctl -w fs.file-max=65536
cat <<EOF >> /etc/sysctl.conf
vm.max_map_count=262144
fs.file-max=65536
EOF
2.创建用户并设置文件及进程打开数
useradd -d /home/sonarqube sonarqube
cat << EOF >> /etc/security/limits.conf
sonar - nofile 65536
sonar - nproc 4096
EOF
3.切换到sonarqube用户验证设置
su - sonarqube
ulimit -n
65536
ulimit -u
4096
sysctl vm.max_map_count
vm.max_map_count = 262144
sysctl fs.file-max
fs.file-max = 65536
六、部署 PostgreSQL
本地环境基于:CentOS Linux release 7.6.1810 (Core)
1.安装PostgreSQL yum源
yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-7.6-x86_64/pgdg-redhat-repo-latest.noarch.rpm
2.安装PostgreSQL10
yum install postgresql10.x86_64 postgresql10-devel.x86_64 postgresql10-server.x86_64 -y
3.初始化PostgreSQL数据库并设置位开机启动
/usr/pgsql-10/bin/postgresql-10-setup initdb
Initializing database ... OK
PostgreSQL默认监听5432端口 PostgreSQL默认数据存储路径/var/lib/pgsql/10/data/
4.修改postgres的监听地址,默认只能为本地连接
echo "listen_addresses = '*'" >> /var/lib/pgsql/10/data/postgresql.conf
5.允许所有地址 来连接该数据库 编辑pg_hba.conf文件,然后到最后,把认证模式改为如下,这个地方是个坑,务
vim /var/lib/pgsql/10/data/pg_hba.conf
local all all trust
host all all 127.0.0.1/32 md5
host all all 0.0.0.0/0 md5
host all all ::1/128 trust
local replication all peer
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
6.重启postgresql数据库
systemctl restart postgresql-10
7.为SonarQube创建数据库并授权
su - postgres
-bash-4.2$ psql
psql (10.12)
Type "help" for help.
#创建sonarqube数据库角色
postgres=# create user sonarqube with password '[email protected]!';
CREATE ROLE
#创建sonarqube数据库
postgres=# create database sonarqube owner sonarqube;
CREATE DATABASE
#授权sonarqube数据库所有权限给sonarqube
postgres=# grant all on database sonarqube to sonarqube;
GRANT
#退出数据库
postgres-# \q
-bash-4.2$ exit
logout
8.连接数据库用户测试
[[email protected] /]# psql --username=sonarqube -h localhost
psql (10.12)
Type "help" for help.
sonarqube=> \q
[[email protected] /]# psql --username=sonarqube -h 127.0.0.1
Password for user sonarqube:
psql (10.12)
Type "help" for help.
sonarqube=> \q
[[email protected] /]# psql --username=sonarqube -h 192.168.31.243
Password for user sonarqube:
psql (10.12)
Type "help" for help.
sonarqube=> \q
七、部署 JAVA 环境
Oracle JRE下载地址:https://www.oracle.com/java/technologies/javase-jdk11-downloads.html 在此选择 SonarQube、Scanners和Elasticsearch使用 Oracle JRE 的 Java 11版本 服务器系统使用OpenJDK的8版本
1.Oracle JRE下载完成后上传服务器
tar xf jdk-11.0.6_linux-x64_bin.tar.gz -C /usr/local/
/usr/local/jdk-11.0.6/bin/java --version
java 11.0.6 2020-01-14 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.6+8-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.6+8-LTS, mixed mode)
2.系统安装OpenJDK
yum install java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64 -y
java -version
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-b08)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)
八、部署 SonarQube
1.下载SonarQuibe并解压
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.9.2.zip
unzip -o sonarqube-7.9.2.zip -d /usr/local/
2
vim /usr/local/sonarqube-7.9.2/conf/sonar.properties
sonar.jdbc.username=sonarqube
sonar.jdbc.password=Sona[email protected]!
sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube
3.添加JDBC数据库驱动程序 除Oracle除外需要驱动程序,其它数据库已经内嵌了JDBC驱动
4.修改SonarQube及Elasticsearch使用的JAVA路径
vim /usr/local/sonarqube-7.9.2/conf/wrapper.conf
wrapper.java.command=/usr/local/jdk-11.0.6/bin/java
5.修改Elasticsearch数据存储路径
vim /usr/local/sonarqube-7.9.2/conf/sonar.properties
sonar.path.data=/data/elastic/data
sonar.path.temp=/data/elastic/temp
6.修改文件属性
mkdir -p /data/elastic/{data,temp}
chown -Rf sonarqube.sonarqube /data/elastic/*
chown -Rf sonarqube.sonarqube /usr/local/sonarqube-7.9.2
7.修改监听地址及端口 默认监听所有地址和9000端口
vim /usr/local/sonarqube-7.9.2/conf/sonar.properties
sonar.web.host=0.0.0.0
sonar.web.port=9000
8.启动SonarQube服务
#不能以root用户启动
su - sonarqube -c "/usr/local/sonarqube-7.9.2/bin/linux-x86-64/sonar.sh start"
9.查看程序是否运行
ps -ef|grep sonarqube
ss -anplt | grep java
#如果启动出错,请检查日志
ls /usr/local/sonarqube-7.9.2/logs/
access.log ce.log es.log README.txt sonar.log web.log
10.浏览器访问http://192.168.30.30:9000/并登录修改语言,默认帐号密码为admin/admin
安装中文插件chinese pack,安装成功后点击重启服务器

重启成功后皆为中文

九、部署 Nodejs 环境
curl --silent --location https://rpm.nodesource.com/setup_10.x | sudo bash
yum clean all && yum makecache
yum install nodejs.x86_64 -y
node --version
v10.19.0
npm -v
6.13.4
十、质量扫描 sonar-scanner
1.下载质量扫描仪
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.0.0.1744-linux.zip
unzip -o sonar-scanner-cli-4.0.0.1744-linux.zip -d /usr/local/
2.修改配置文件
mv /usr/local/sonar-scanner-4.0.0.1744-linux /usr/local/sonar-scanner
vim /usr/local/sonar-scanner/conf/sonar-scanner.properties
sonar.host.url=http://localhost:9000 #指定SonarQube的地址
sonar.sourceEncoding=UTF-8 #指定编码
3.使用方法 在我们要扫描项目的根目录中创建文件 sonar-project.properties
内容如下:
sonar.projectKey=v2.3.8 #项目中给定的唯一值,可自定义,不能与其它项目中的唯一值一致
sonar.projectName=myapp #显示的名称,sonar-scanner扫描项目后将扫描结果传入到SonarQube中,就是通过此值来显示名称
sonar.projectVersion=1.0
sonar.sources=. #项目分析的位置 . 表示当前目录开始分析
sonar.java.binaries=.
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8
4.样例扫描
1.克隆官方给予提供的案例
git clone https://github.com/SonarSource/sonar-scanning-examples.git
2.添加sonar-project.properties文件
vim /opt/sonar-scanning-examples/sonarqube-scanner-maven/sonar-project.properties
sonar.projectKey=v2.3.8
sonar.projectName=crm
sonar.projectVersion=1.0
sonar.sources=.
sonar.java.binaries=.
sonar.sourceEncoding=UTF-8
3.开始扫描
cd /opt/sonar-scanning-examples/sonarqube-scanner-maven
/usr/local/sonar-scanner/bin/sonar-scanner

SonarQube Web页面查看扫描结果
