SonarQube代码质量检查7.7版本

概述

官方地址:https://www.sonarqube.org/

SonarQube检查功能

  1. 不遵循代表标准(checkstyle)

  2. 潜在缺陷(空指针)

  3. 糟糕的复杂度(难以理解)

  4. 重复(通用的方法需要归纳封装)

  5. 糟糕的注释

  6. 糟糕的设计(耦合度检查)

SonarQube框架

  • Project

  • SonarQube Scanner

  • SonarQube Server

  • SonarQube Database

架构图:

  • Project

    是需要被分析的代码,例:前端商城html代码,java代码等

  • SonarQube Scanner

    用于执行代码分析的工具,在Project的根目录下执行,我们还需要在Project下进行SonarQube配置,其中指定了工程的相关信息,还指定了SonarQube Server的地址,SonarQube Scanner分析完毕之后,会将结果上报到该Server。

  • SonarQube Server

    显示分析结果的Web Server,在SonarQube Scanner第一次将一个工程的分析结果上报给SonarQube Server后,Server上会自动创建一个工程显示分析的结果,可以在Server上设置代码质量管理相关的各种配置,如设置代码检查规则(Rule)和质量门限(Quality Gate)等。

注:因为版本之间的安装要求不同部署时请看一下各版本的 官方文档,在7.8版本及以后JVM环境不在支持 jdk8,而是改为 jdk11+,数据库也不在支持MySQL,数据库字符集为utf8

环境准备

  环境规划:

主机 公网ip 系统版本 jdk版本 sonarqube版本 数据库 内存
web01 10.0.0.7 CentOS-7.6.1810 1.8.0_241 7.7 社区版 mysql 5.7 3G+

  阿里镜像:

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

安装jdk8

jdk8官方地址:https://www.oracle.com/java/technologies/javase-jdk8-downloads.html

1.8.0_241版本rpm包:https://pan.baidu.com/s/1QyWPJ84Oh6dLQfI6-svD1g 提取码:kogd

yum  localinstall jdk-8u241-linux-x64.rpm -y
java -version
java version "1.8.0_241"
Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)

安装MySQL

官方网站:https://www.mysql.com/

二进制包下载:https://pan.baidu.com/s/1xxq1r8alOfRt86sMMxbgxA 提取码:srbs

检查历史环境

rpm -qa |grep mariadb
rpm -qa | grep mysql

创建用户和组

#用户不登录系统
id mysql
useradd mysql -s /sbin/nologin
uid=1000(mysql) gid=1000(mysql) groups=1000(mysql)

注:如果mysql id为27,就是以前创建过。

创建相关目录

#创建软件目录
mkdir -p /app/database/
#创建数据目录
mkdir -p /data/3306/
#创建日志目录
mkdir -p /binlog/3306/

#目录授权
chown -R mysql.mysql /app/ /data/ /binlog

上传并解压

cd /app/database/   
tar xf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
ln -s mysql-5.7.28-linux-glibc2.12-x86_64 mysql

设置环境变量

vim /etc/profile
export PATH=/app/database/mysql/bin:$PATH
source /etc/profile
mysql -V
mysql  Ver 14.14 Distrib 5.7.28, for linux-glibc2.12 (x86_64) using  EditLine wrapper

初始化系统表

#安装依赖包
yum install -y libaio-devel
#初始化
mysqld --initialize-insecure --user=mysql --basedir=/app/database/mysql --datadir=/data/3306/

配置文件设置

cat > /etc/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/app/database/mysql
datadir=/data/3306
server_id=6
port=3306
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock
EOF

准备启动脚本

cd /app/database/mysql/support-files/
cp mysql.server /etc/init.d/mysqld

centos7启动方式

chkconfig --add mysqld
service mysqld stop
Shutting down MySQL.. SUCCESS! 
systemctl start mysqld

数据库创建用户并授权

#创建用户
create user 'sonar' identified by '123455';
#创建sonar数据库
create database sonar character set utf8 collate utf8_general_ci;
#授权10网段主机登录
grant all on sonar.* to 'sonar'@'10.0.0.%' identified by '123456';
#授权本地主机登录
grant all on sonar.* to 'sonar'@'localhost' identified by '123456'
flush privileges;

配置elasticsearch需要的环境

如果您在Linux上运行,则必须确保:

  • vm.max_map_count 大于或等于262144

  • fs.file-max 大于或等于65536

  • 运行SonarQube的用户可以打开至少65536个文件描述符

  • 运行SonarQube的用户可以打开至少2048个线程

您可以使用以下命令查看值:

sysctl vm.max_map_count
sysctl fs.file-max
ulimit -n
ulimit -u

临时修改

您可以通过运行以下命令来为当前会话动态设置它们 root

sysctl -w vm.max_map_count=262144
#CentOs7默认值都比这个大
sysctl -w fs.file-max=65536
ulimit -n 65536
ulimit -u 2048

永久修改

vim  /etc/security/limits.conf
*        hard    nofile           65536
*        soft    nofile           65536

vim /etc/sysctl.conf
vm.max_map_count=262144
fs.file-max=65536

#命令行同时输入,这样我们不用重启,下次重启也能生效
sysctl -w vm.max_map_count=262144
#CentOs7默认值都比这个大
sysctl -w fs.file-max=65536
ulimit -n 65536
ulimit -u 65536

seccomp过滤器

注:这里Centos7系统默认开启

默认情况下,Elasticsearch使用seccomp filter。在大多数发行版中,此功能已在内核中激活,但是在诸如Red Hat Linux 6的发行版中,此功能已停用。如果使用不具有此功能的发行版,并且无法在激活seccomp的情况下升级到较新版本,则必须通过sonar.search.javaAdditionalOpts$ SONARQUBE HOME / conf / sonar.properties_中进行更新来显式停用此安全层:

sonar.search.javaAdditionalOpts=-Dbootstrap.system_call_filter=false

您可以使用以下方法检查seccomp在内核上是否可用:

grep SECCOMP /boot/config-$(uname -r)

如果您的内核具有seccomp,您将看到:

CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
CONFIG_SECCOMP_FILTER=y
CONFIG_SECCOMP=y

安装Sonarkuube服务端

7.7版本官方文档:https://docs.sonarqube.org/7.7/requirements/requirements/

创建用户、解压、创建目录

注:es启动时不能使用root 用户启动

useradd sonarqube
echo "sonarqube:123456" |chpasswd


#下载并解压
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.7.zip
unzip sonarqube-7.7.zip
mv sonarqube-7.7 /usr/local/sonarqube
chown  sonarqube:sonarqube -R  /usr/local/sonarqube/

mkdir -p /data/sonarqube/{data,temp}
chown sonarqube:sonarqube -R /data/sonarqube/

修改配置文件

vim /usr/local/sonarqube/conf/sonar.properties

sonar.jdbc.username=sonar
sonar.jdbc.password=123456
sonar.login=admin
sonar.password=admin
sonar.jdbc.url=jdbc:mysql://10.0.0.7:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.web.javaOpts=-server
sonar.path.data=/data/sonarqube/data
sonar.path.temp=/data/sonarqube/temp

启动sonarqube

判断linux是32位还是64位:uname -a
su - sonarqube
cd /usr/local/sonarqube/bin/linux-x86-64/
普通启动:./sonar.sh console
后台启动:./sonar.sh start   
通过指令:netstat -tnlp     检查9000端口是否启动成功

web登录

进入ip+端口9000。使用admin/admin登录

sonarqube汉化

方式一:直接安装插件(网络慢会下载失败)

 方式二:下载插件安装

查看各版本兼容情况:

地址:https://github.com/SonarQubeCommunity/sonar-l10n-zh

旧版本下载地址:https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases/latest

#插件下载地址
wget https://github.com/SonarQubeCommunity/sonar-l10n-zh/releases/download/sonar-l10n-zh-plugin-1.27/sonar-l10n-zh-plugin-1.27.jar

cp sonar-l10n-zh-plugin-1.27.jar  /usr/local/sonarqube-7.7/extensions/plugins/
#重启sonarqube

开机自启动

1. 创建任务

vi /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  
/usr/local/sonarqube/bin/linux-x86-64/sonar.sh $* 

2.增加执行权限

chmod +x /etc/init.d/sonar

3.添加任务

chkconfig --add sonar

4.配置服务启动时的jdk

注:这里我们使用的是二进制jdk,路径默认是/usr/bin下

# which java
/usr/bin/java

vi /opt/sonarqube/conf/wrapper.conf
修改wrapper.java.command=java,配置为jdk中java命令的绝对路径
wrapper.java.command=/usr/bin/java

5. 管理命令

service sonar start        -->开启
service sonar stop        -->关闭        
service sonar restart    -->重启
service sonar status    -->查看状态

安装sonar-scaner扫描器

安装jdk

注:扫描器需要部署在有Jenkins的主机上面,扫描器也需要java环境

yum localinstall jdk-8u241-linux-x64.rpm -y
java -version

安装扫描器

官方文档:https://docs.sonarqube.org/latest/analysis/scan/sonarscanner/

sonar-scaner下载地址:https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/

https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.3.0.2102.zip
unzip sonar-scanner-cli-4.3.0.2102.zip
mv sonar-scanner-4.3.0.2102 /usr/local/sonar-scanner
ln -s /usr/local/sonar-scanner/bin/sonar-scanner /usr/bin/
sonar-scanner

配置文件

注:如果扫描器和服务不在一个主机请看配置文件

vim  /usr/local/sonar-scanner/conf/sonar-scanner.properties
#连接主机使用,这里在一个主机我们默认
sonar.host.url=http://localhost:9000

#----- Default source code encoding
#sonar.sourceEncoding=UTF-8

项目实例

创建项目:

配置:

创建token保留,后期Jenkins配置会用到:

sonar-scanner \
  -Dsonar.projectKey=jeesns \
  -Dsonar.sources=. \
  -Dsonar.host.url=http://10.0.0.7:9000 \
  -Dsonar.login=5e549a887d69ec7b8130cd56d45b22b738a7af29

5e549a887d69ec7b8130cd56d45b22b738a7af29

java项目检查命令保留:

mvn sonar:sonar \
  -Dsonar.projectKey=jeesns \
  -Dsonar.host.url=http://10.0.0.7:9000 \
  -Dsonar.login=5e549a887d69ec7b8130cd56d45b22b738a7af29

其他源码检查保留:

注:将检查其他代码的命令复制到代码目录下面

Jenkins集成sonarqube

请看这篇文章下面演示:https://www.cnblogs.com/Mercury-linux/p/12661786.html#autoid-2-3-0

猜你喜欢

转载自www.cnblogs.com/Mercury-linux/p/12688120.html