介绍:
主要检测,代码规范,代码错误,代码漏洞。

  1. SonarQube基础java开发,需安装open JDK8版本
  2. SonarQube需要依赖MySQL数据库,至少5.6版本以上
  3. SonarQube的小型实例至少4G内存,如果大型实例需要16G内存
  4. 在7.6以后版本,需要安装JDK11,并且不再支持MySQL需要使用PostgreSQL

安装postgreSQL

## 1.更换postgreSQL yum源
[root@web01 ~]# rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/postgresql/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-42.0-32.noarch.rpm
#//关闭所有源的gpgcheck验证
[root@web01 ~]# sed -i 's/gpgcheck=1/gpgcheck=0/g' /etc/yum.repos.d/pgdg-redhat-all.repo
# 2.安装postgreSQL
[root@web01 ~]# yum install -y postgresql13-server
# 3.初始化
[root@web01 ~]# /usr/pgsql-13/bin/postgresql-13-setup initdb
Initializing database ... OK
[root@web01 ~]# ll /var/lib/pgsql/13/data/
total 52
drwx------ 5 postgres postgres 41 Aug 29 10:37 base
drwx------ 2 postgres postgres 4096 Aug 29 10:37 global
drwx------ 2 postgres postgres 6 Aug 29 10:37 log
drwx------ 2 postgres postgres 6 Aug 29 10:37 pg_commit_ts
drwx------ 2 postgres postgres 6 Aug 29 10:37 pg_dynshmem
-rw------- 1 postgres postgres 4548 Aug 29 10:37 pg_hba.conf
-rw------- 1 postgres postgres 1636 Aug 29 10:37 pg_ident.conf
drwx------ 4 postgres postgres 68 Aug 29 10:37 pg_logical
drwx------ 4 postgres postgres 36 Aug 29 10:37 pg_multixact
drwx------ 2 postgres postgres 6 Aug 29 10:37 pg_notify
drwx------ 2 postgres postgres 6 Aug 29 10:37 pg_replslot
drwx------ 2 postgres postgres 6 Aug 29 10:37 pg_serial
drwx------ 2 postgres postgres 6 Aug 29 10:37 pg_snapshots
drwx------ 2 postgres postgres 6 Aug 29 10:37 pg_stat
drwx------ 2 postgres postgres 6 Aug 29 10:37 pg_stat_tmp
drwx------ 2 postgres postgres 18 Aug 29 10:37 pg_subtrans
drwx------ 2 postgres postgres 6 Aug 29 10:37 pg_tblspc
drwx------ 2 postgres postgres 6 Aug 29 10:37 pg_twophase
-rw------- 1 postgres postgres 3 Aug 29 10:37 PG_VERSION
drwx------ 3 postgres postgres 60 Aug 29 10:37 pg_wal
drwx------ 2 postgres postgres 18 Aug 29 10:37 pg_xact
-rw------- 1 postgres postgres 88 Aug 29 10:37 postgresql.auto.conf
-rw------- 1 postgres postgres 28100 Aug 29 10:37 postgresql.conf
# 4.启动postgre
[root@web01 ~]# systemctl start postgresql-13
# 5.切换用户
[root@web01 data]# su - postgres
# 6.登录终端
-bash-4.2$ psql
psql (13.12)
Type "help" for help.

postgres=# 
# 7.创建用户
postgres=# create user sonar_user with password '123';
# 8.创建数据库
postgres=# create database sonar_db owner sonar_user;
# 9.授权
postgres=# grant all on database sonar_db to sonar_user;
GRANT
# 10.测试连接数据库
[root@web01 ~]# psql -d sonar_db -U sonar_user -h127.0.0.1
Password for user sonar_user: 
psql (13.12)
Type "help" for help.

sonar_db=> 

安装sonar

#环境优化:
sysctl vm.max_map_count
sysctl fs.file-max
ulimit -n
ulimit -u
sysctl -w vm.max_map_count=524288
sysctl -w fs.file-max=131072
ulimit -n 131072
ulimit -u 8192
----------------------------------------------------------------------------------------------------
vim /etc/security/limits.conf
sonarqube - nofile 131072
sonarqube - nproc 8192

#安装java环境
[root@web01 ~]# yum install -y java-11-openjdk
# 1.创建目录
[root@web01 ~]# mkdir /app
# 2.解压
[root@web01 ~]# unzip sonarqube-9.8.0.63668.zip -d /app/
# 3.改名
[root@web01 ~]# mv sonarqube-9.8.0.63668/ sonarqube-9.8
# 4.软链接
[root@web01 ~]# ln -s /app/sonarqube-9.8 /app/sonarqube
# 5.修改配置文件
[root@web01 ~]# vim /app/sonarqube/conf/sonar.properties
sonar.jdbc.username=sonar_user
sonar.jdbc.password=123
# 6.创建sonar系统用户
[root@web01 ~]# useradd sonar
# 7.授权
[root@web01 ~]# chown -R sonar.sonar /app/sonar*
# 8.启动
[root@web01 ~]#  su - sonar -c "/app/sonarqube/bin/linux-x86-64/sonar.sh start"
#查看端口  
[root@web01 ~]# netstat -lntup | grep 9000
#端口没有,表示服务没起来,查看日志
[root@web01 ~]# tail -f /app/sonarqube/logs/nohup.log 
Unrecognized option: --add-exports=java.base/jdk.internal.ref=ALL-UNNAMED
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
#报错使用了一个不被识别的 JVM 选项,java版本冲突导致,卸载掉jdk11之外的即可
[root@web01 ~]# yum remove -y java-1.8.0-openjdk-1.8.0.372.b07-1.el7_9.x86_64 java-1.8.0-openjdk-headless-1.8.0.372.b07-1.el7_9.x86_64
#重新启动
[root@web01 ~]# su - sonar -c "/app/sonarqube/bin/linux-x86-64/sonar.sh start"
#端口再次查看
[root@web01 ~]# netstat -lntup | grep 9000
tcp6       0      0 :::9000                 :::*                    LISTEN      12474/java    
#浏览器访问
10.0.0.83:9000

image-20230829163641741

image-20230829163736723

生成token

image-20230829164319802

image-20230829164326179

#token
squ_a1a173d59c336833cd5afca5578260b51f612fe8

创建项目

image-20230829164445339

image-20230829164642255

image-20230829164702353

image-20230829164758793

image-20230829164843444

mvn clean verify sonar:sonar \
  -Dsonar.projectKey=java \
  -Dsonar.host.url=http://10.0.0.83:9000 \
  -Dsonar.login=squ_a1a173d59c336833cd5afca5578260b51f612fe8
#代码验证  //移动到jenkins代码复制目录下 var/lib/jenkins/workspace/java-构建
[root@jenkins]# mvn clean verify sonar:sonar \
>   -Dsonar.projectKey=java \
>   -Dsonar.host.url=http://10.0.0.83:9000 \
>   -Dsonar.login=squ_a1a173d59c336833cd5afca5578260b51f612fe8
[INFO] Scanning for projects...

报错:执行 Maven 插件的过程中遇到了 API 不兼容性问题。具体来说,问题是由于不同版本的 Java 编译造成的

解决方法:升级java或者降低maven版本

image-20230829170822933

#更换maven版本
[root@jenkins ~]# wget https://dlcdn.apache.org/maven/maven-3/3.9.4/binaries/apache-maven-3.9.4-bin.tar.gz --no-check-certificate
#解压
[root@jenkins ~]# tar xf apache-maven-3.9.4-bin.tar.gz -C /usr/lib/
#创建软链接
 [root@jenkins ~]# ln -s /usr/lib/apache-maven-3.9.4 /usr/lib/maven
# 配置环境变量
cat >> /etc/profile.d/maven.sh << EOF
export MAVEN_HOME=/usr/lib/maven/
export PATH=$PATH:$MAVEN_HOME/bin

export MAVEN_HOME=/app/maven/
export PATH=${PATH}:${MAVEN_HOME}/bin
EOF
# 生效当前配置
source /etc/profile
#查看HOME路径

image-20230829180309933

maven:  /usr/lib/apache-maven-3.9.4
JDK:    /usr/lib/jvm/java-11-openjdk-11.0.20.0.8-1.el7_9.x86_64
#变量设置
vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-11.0.20.0.8-1.el7_9.x86_64
export PATH=$JAVA_HOME/bin:$PATH
# 生效当前配置
source /etc/profile

网页修改信息:

image-20230829181115679

image-20230829181205626

#重新代码验证
[root@jenkins java-构建]#  mvn clean verify sonar:sonar \
>   -Dsonar.projectKey=java \
>   -Dsonar.host.url=http://10.0.0.83:9000 \
>   -Dsonar.login=squ_a1a173d59c336833cd5afca5578260b51f612fe8

image-20230829184130432

image-20230829184248254

Sonarqube 10.1版本部署

PostgreSQL安装

## 1.更换postgreSQL yum源
[root@web01 ~]# rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/postgresql/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-42.0-32.noarch.rpm
#//关闭所有源的gpgcheck验证
[root@web01 ~]# sed -i 's/gpgcheck=1/gpgcheck=0/g' /etc/yum.repos.d/pgdg-redhat-all.repo
# 2.安装postgreSQL
[root@web01 ~]# yum install -y postgresql13-server
# 3.初始化
[root@web01 ~]# /usr/pgsql-13/bin/postgresql-13-setup initdb
Initializing database ... OK
[root@web01 ~]# ll /var/lib/pgsql/13/data/
total 52
drwx------ 5 postgres postgres 41 Aug 29 10:37 base
drwx------ 2 postgres postgres 4096 Aug 29 10:37 global
drwx------ 2 postgres postgres 6 Aug 29 10:37 log
drwx------ 2 postgres postgres 6 Aug 29 10:37 pg_commit_ts
drwx------ 2 postgres postgres 6 Aug 29 10:37 pg_dynshmem
-rw------- 1 postgres postgres 4548 Aug 29 10:37 pg_hba.conf
-rw------- 1 postgres postgres 1636 Aug 29 10:37 pg_ident.conf
drwx------ 4 postgres postgres 68 Aug 29 10:37 pg_logical
drwx------ 4 postgres postgres 36 Aug 29 10:37 pg_multixact
drwx------ 2 postgres postgres 6 Aug 29 10:37 pg_notify
drwx------ 2 postgres postgres 6 Aug 29 10:37 pg_replslot
drwx------ 2 postgres postgres 6 Aug 29 10:37 pg_serial
drwx------ 2 postgres postgres 6 Aug 29 10:37 pg_snapshots
drwx------ 2 postgres postgres 6 Aug 29 10:37 pg_stat
drwx------ 2 postgres postgres 6 Aug 29 10:37 pg_stat_tmp
drwx------ 2 postgres postgres 18 Aug 29 10:37 pg_subtrans
drwx------ 2 postgres postgres 6 Aug 29 10:37 pg_tblspc
drwx------ 2 postgres postgres 6 Aug 29 10:37 pg_twophase
-rw------- 1 postgres postgres 3 Aug 29 10:37 PG_VERSION
drwx------ 3 postgres postgres 60 Aug 29 10:37 pg_wal
drwx------ 2 postgres postgres 18 Aug 29 10:37 pg_xact
-rw------- 1 postgres postgres 88 Aug 29 10:37 postgresql.auto.conf
-rw------- 1 postgres postgres 28100 Aug 29 10:37 postgresql.conf
# 4.启动postgre
[root@web01 ~]# systemctl start postgresql-13
# 5.切换用户
[root@web01 data]# su - postgres
# 6.登录终端
-bash-4.2$ psql
psql (13.12)
Type "help" for help.

postgres=# 
# 7.创建用户
postgres=# create user sonar_user with password '123';
# 8.创建数据库
postgres=# create database sonar_db owner sonar_user;
# 9.授权
postgres=# grant all on database sonar_db to sonar_user;
GRANT
# 10.测试连接数据库
[root@web01 ~]# psql -d sonar_db -U sonar_user -h127.0.0.1
Password for user sonar_user: 
psql (13.12)
Type "help" for help.

sonar_db=> 

JDK17安装

#1、下载安装包 java17和java8一样,都是LTS长期支持版本,因此这里直接下载java17
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
#2、解压安装包,修改包名为jdk-17
tar zxf jdk-17_linux-x64_bin.tar.gz
rm -rf jdk-17_linux-x64_bin.tar.gz
mv jdk-17.0.3.1 jdk-17
#3、移动文件夹到/usr/local下
mv jdk-17 /usr/local/
#4、将java添加到环境变量中
vim /etc/profile

export JAVA_HOME=/usr/local/jdk-17
export PATH=/usr/local/php/bin:/usr/local/jdk-17/bin:$PATH
# 5、环境变量生效
source /etc/profile
#6、验证是否安装java成功
java -version

image-20230829192219914

安装 SonarQube

下载社区版:SonarQube10.1

#环境优化:
sysctl vm.max_map_count
sysctl fs.file-max
ulimit -n
ulimit -u
sysctl -w vm.max_map_count=524288
sysctl -w fs.file-max=131072
ulimit -n 131072
ulimit -u 8192
----------------------------------------------------------------------------------------------------
vim /etc/security/limits.conf
sonarqube - nofile 131072
sonarqube - nproc 8192

# 1.创建目录
[root@web01 ~]# mkdir /app
# 2.解压
[root@web01 ~]# unzip sonarqube-10.1.0.73491.zip -d /app/
# 3.改名
[root@web01 ~]# mv sonarqube-10.1.0.73491/ sonarqube-10.1
# 4.软链接
[root@web01 ~]# ln -s /app/sonarqube-10.1 /app/sonarqube
# 5.修改配置文件
[root@web01 ~]# vim /app/sonarqube/conf/sonar.properties
sonar.jdbc.username=sonar_user
sonar.jdbc.password=123
# 6.创建sonar系统用户
[root@web01 ~]# useradd sonar
# 7.授权
[root@web01 ~]# chown -R sonar.sonar /app/sonar*
# 8.启动
[root@web01 ~]#  su - sonar -c "/app/sonarqube/bin/linux-x86-64/sonar.sh start"
#查看端口  
[root@web01 ~]# netstat -lntup | grep 9000
#端口没有,表示服务没起来,查看日志
[root@web01 ~]# tail -f /app/sonarqube/logs/nohup.log 
Unrecognized option: --add-exports=java.base/jdk.internal.ref=ALL-UNNAMED
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
#报错使用了一个不被识别的 JVM 选项,java版本冲突导致,卸载掉jdk11之外的即可
[root@web01 ~]# yum remove -y java-1.8.0-openjdk-1.8.0.372.b07-1.el7_9.x86_64 java-1.8.0-openjdk-headless-1.8.0.372.b07-1.el7_9.x86_64
#重新启动
[root@web01 ~]# su - sonar -c "/app/sonarqube/bin/linux-x86-64/sonar.sh start"
#端口再次查看
[root@web01 ~]# netstat -lntup | grep 9000
tcp6       0      0 :::9000                 :::*                    LISTEN      12474/java    
#浏览器访问
10.0.0.83:9000

image-20230829163641741

image-20230829163736723

生成token

image-20230829164319802

image-20230829164326179

#token
squ_abd87057be010b87265b82779d9342234f3d2065

创建项目

image-20230829164445339

image-20230829164642255

image-20230830145220629

image-20230829164702353

image-20230829204158393

image-20230829204219011

mvn clean verify sonar:sonar \
  -Dsonar.projectKey=java \
  -Dsonar.projectName='java' \
  -Dsonar.host.url=http://10.0.0.83:9000 \
  -Dsonar.token=squ_abd87057be010b87265b82779d9342234f3d2065
#代码验证  //移动到jenkins代码复制目录下 var/lib/jenkins/workspace/java-构建
[root@jenkins java-构建]# mvn clean verify sonar:sonar \
>   -Dsonar.projectKey=java \
>   -Dsonar.projectName='java' \
>   -Dsonar.host.url=http://10.0.0.83:9000 \
>   -Dsonar.token=squ_abd87057be010b87265b82779d9342234f3d2065

image-20230829204716036