Linux Note / 运维笔记

SonarQube 7.9 LTS 介绍与使用

Einic Yeo · 4月16日 · 2020年 · · ·

一、SonarQube简介

SonarQube是一种自动代码审查工具,用于检测代码中的错误,漏洞和代码异味。它可以与您现有的工作流程集成,以便在项目分支和拉取请求之间进行连续的代码检查。

二、SonarQube四个组件:

  • Web Server
  • SonarQube Database
  • SonarQube Plugin
  • Code analysis Scanners

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

三、代码质量七宗罪

如果版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!被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数据库并设置位开机启动

版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!
/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 'SonarQube@2020!';
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.连接数据库用户测试

[root@micvs-node4 /]# psql --username=sonarqube -h localhost
psql (10.12)
Type "help" for help.
sonarqube=> \q
[root@micvs-node4 /]# psql --username=sonarqube -h 127.0.0.1
Password for user sonarqube:
psql (10.12)
Type "help" for help.
sonarqube=> \q
[root@micvs-node4 /]# 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://版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!www.oracle.com/java/technologies/javase-jdk11-downloads.html 在此选择 SonarQube、Scanners和Elasticsearch使用 Oracle JRE 的 Java 11版本 服务器系统使用OpenJDK的8版本

1.Oracle JRE下版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!载完成后上传服务器

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.修改SonarQuibe连接数据库

vim /usr/local/sonarqube-7.9.2/conf/sonar.properties
sonar.jdbc.username=sonarqube
sonar.jdbc.password=SonarQube@2020!
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.浏览器访问htt版权声明:本文遵循 CC 4.0 BY-SA 版权协议,若要转载请务必附上原文出处链接及本声明,谢谢合作!p://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页面查看扫描结果

参考文献

https://docs.sonarqube.org/latest/

0 条回应