【DevOps】第五章 SonarQube安装配置(一)

一、SonarQube简介

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

目前适用于 29编程语言:
在这里插入图片描述

1、场景

在这里插入图片描述
在典型的开发过程中:

  1. 开发人员在 IDE 中开发和合并代码,并将他们的代码签入到 DevOps 平台。
  2. 持续集成 (CI) 工具检查、构建和运行单元测试,集成的 SonarQube 扫描仪分析结果。
  3. 扫描器将结果发布到 SonarQube 服务器,该服务器通过 SonarQube 界面、电子邮件、IDE 内通知(通过 SonarLint),向开发人员反馈。

2、服务架构

SonarQube 实例包含三个组件:
在这里插入图片描述

  1. SonarQube 服务器运行以下进程:
  • 为 SonarQube 用户界面提供服务的 Web 服务器。
  • 基于 Elasticsearch 的搜索服务器。
  • 负责处理代码分析报告并将其保存在 SonarQube 数据库中的计算引擎。
  1. 存储以下内容的数据库:
  • 代码扫描期间生成的代码质量和安全性指标和问题。
  • SonarQube 实例配置。
  1. 在构建或持续集成服务器上运行的一个或多个扫描器来分析项目。

二、安装条件

1、必须软件

SonarQube是‘基于java语言’开发的,因此SonarQube 的机器上必须安装 Java(Oracle JRE 或 OpenJDK)。

2、硬件要求

  1. SonarQube 服务器实例需要至少 2GB 的 RAM 才能有效运行,并且需要 1GB 的可用 RAM 供操作系统使用,生产至少8核16GB。
  2. 您需要的磁盘空间量取决于您使用 SonarQube 分析的代码量。
  3. SonarQube 必须安装在具有出色读写性能的硬盘上。最重要的是,“data”文件夹包含 Elasticsearch 索引,当服务器启动并运行时,将在这些索引上完成大量 I/O。因此,出色的硬盘读写性能将对 SonarQube 服务器的整体性能产生很大影响。
  4. SonarQube 在服务器端不支持 32 位系统。然而,SonarQube 在扫描仪端支持 32 位系统。

3、软件选择

基于SonarQube 8.9.8 LTS

3.1 Java

SonarQube 扫描器需要 JVM 版本 8 或 11,SonarQube 服务器需要版本 11。
SonarQube 能够分析任何类型的 Java 源文件,无论基于什么 Java 版本。

在这里插入图片描述

3.2 数据库

MySQL 弃用和迁移
从 7.9 版开始,SonarQube 将不再支持 MySQL。要从 MySQL 迁移到受支持的数据库,请参阅MySQL Migrator 工具。

如下表SonarQube支持如下3种数据库,可根据自己需求进行选择,本文选择开源数据库PostgreSQL 13。

3.3 linux环境说明

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

  • vm.max_map_count大于或等于 524288
  • fs.file-max大于或等于 131072
  • 运行 SonarQube 的用户可以打开至少 131072 个文件描述符
  • 运行 SonarQube 的用户至少可以打开 8192 个线程
#查看默认值
sysctl vm.max_map_count
sysctl fs.file-max
ulimit -n   #指定系统打开的最大文件数,默认值1024,如果超过设定值报error:too many open file
ulimit -u	#用户最多可开启的进程数目

可以通过运行以下命令为当前会话动态设置(需要root权限):

sysctl -w vm.max_map_count=524288
sysctl -w fs.file-max=131072
ulimit -n 131072
ulimit -u 8192

sysctl -w #-w 临时改变某个指定参数的值
要永久地设置这些值,更新_/etc/sysctl.d/99-sonarqube.conf_(或_/etc/sysctl.conf_)

ulimit #临时修改
永久生效: /etc/security/limits.conf是linux资源限制配置文件,需要在root权限下,才能修改/etc/security/limits.conf文件。
centos6 需修改的文件路径为 /etc/security/limits.d/90-nproc.conf ,centos7 需修改的文件路径为 /etc/security/limits.d/20-nproc.conf
注意: 修改完limits.conf文件后,需要重启才能生效,通过ulimit -a检验是否生效。

三、安装配置

1、软件版本及系统配置

1.1 软件版本

软件名软件版本IP系统配置
JDKjdk-11.0.15

192.168.223.92


CentOS 7.9


2C/3G
sonarqube8.9.8LTS192.168.223.92CentOS 7.92C/3G
PostgreSQLpostgresql-13192.168.223.92CentOS 7.92C/3G
jenkinsJenkins 2.341192.168.223.90CentOS 7.92C/3G
gilab13.12.15192.168.223.91CentOS 7.92C/3G

1.2 系统配置

# 临时生效
sysctl -w vm.max_map_count=524288
sysctl -w fs.file-max=131072
ulimit -n 131072
ulimit -u 8192

#查看设置的值
[root@sonarqube ~]# sysctl vm.max_map_count
vm.max_map_count = 524288
[root@sonarqube ~]# sysctl fs.file-max
fs.file-max = 131072
[root@sonarqube ~]# ulimit -n
131072
[root@sonarqube ~]# ulimit -u
8192

  • 永久生效
#1)永久修改
[root@sonarqube ~]# vim /etc/sysctl.conf
vm.max_map_count=524288
fs.file-max=131072
## 查看
[root@sonarqube ~]# sysctl -p
vm.max_map_count = 524288
fs.file-max = 131072

#2)永久修改最大打开文件数和最佳进程数
[root@sonarqube ~]# vim /etc/security/limits.conf

*       soft    nofile  131072  
*       hard    nofile  131072
*       soft    nproc   8192
*       hard    nproc   8192

[root@sonarqube ~]# vim /etc/security/limits.d/20-nproc.conf
*          soft    nproc     8192
root       soft    nproc     unlimited

#检查未生效
[root@sonarqube ~]# ulimit -n
1024
[root@sonarqube ~]# ulimit -u
7184

#需要重启服务器生效,如果不急需重启,先设置临时生效
ulimit -n 131072
ulimit -u 8192

2、部署Jdk

Jdk下载地址:https://www.oracle.com/java/technologies/downloads/#java11-linux
在这里插入图片描述
注意: 需登录下载

#1)通过迅雷下载
jdk-11.0.15.1_linux-x64_bin.tar.gz

#2)上传jdk并安装
[root@sonarqube ~]# cd /usr/local/src/
[root@sonarqube src]# tar zxvf jdk-11.0.15.1_linux-x64_bin.tar.gz -C /usr/local/
#创建软连接
[root@sonarqube local]# ln -sv /usr/local/jdk-11.0.15.1 /usr/local/jdk
"/usr/local/jdk" -> "/usr/local/jdk-11.0.15.1"

#3)配置java环境变量
[root@sonarqube ~]# vim /etc/profile
#java
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib

[root@sonarqube ~]# source /etc/profile

#测试
[root@sonarqube ~]# java -version
java version "11.0.15.1" 2022-04-22 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.15.1+2-LTS-10)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.15.1+2-LTS-10, mixed mode)

3、部署PostgreSQL

3.1 yum方式安装

访问官方网站

  1. 选择版本自动生成安装步骤
    在这里插入图片描述
  2. 安装Pg数据库
# Install the repository RPM:
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# Install PostgreSQL:
sudo yum install -y postgresql13-server
  1. 初始化数据库并启动
# 初始化数据库
sudo /usr/pgsql-13/bin/postgresql-13-setup initdb

#启动数据库
sudo systemctl enable postgresql-13
sudo systemctl start postgresql-13
  1. 创建postgres用户

注意: postgres中的命令不能以root账户运行,yum源安装自动创建了postgres用户,所以此处再次创建

[root@sonarqube ~]# id postgres
uid=26(postgres) gid=26(postgres)=26(postgres)

[root@sonarqube ~]# su - postgres
-bash-4.2$ psql
psql (13.7)
输入 "help" 来获取帮助信息.

postgres=# help
您正在使用psql, 这是一种用于访问PostgreSQL的命令行界面.
键入: \copyright 显示发行条款
       \h 显示 SQL 命令的说明
       \? 显示 pgsql 命令的说明
       \g 或者以分号(;)结尾以执行查询
       \q 退出

  1. 创建sonar用户 和sonarqube数据库
#登录数据库后创建用户
postgres=# create user sonar with password 'yanglt123.';
CREATE ROLE
#创建数据库
postgres=# create database sonarqube owner sonar;
CREATE DATABASE

3.2 开启远程连接

主要修改两个文件:

  • postgresql.conf: 配置PostgreSQL数据库服务器的参数。
  • pg_hba.conf: 配置对数据库的访问权限;
  1. 将数据库服务器的监听模式修改为监听所有主机发出的连接请求。
# 修改配置文件:
[root@sonarqube ~]# vim /var/lib/pgsql/13/data/postgresql.conf
listen_addresses = '*'

在这里插入图片描述
2. 配置用户的访问权限

[root@sonarqube ~]# vim /var/lib/pgsql/13/data/pg_hba.conf
# IPv4 local connections:
host    all             all             127.0.0.1/32            scram-sha-256
host    all             all             192.168.223.0/24        scram-sha-256

在这里插入图片描述

  1. 重启服务
[root@sonarqube ~]# systemctl restart postgresql-13
  1. 测试连接

打开Dbeaver建立连接:

在这里插入图片描述
在这里插入图片描述

4、部署SonarQube

[安装文档]https://docs.sonarqube.org/8.9/setup/install-server/
[下载地址]https://www.sonarqube.org/downloads/

Version: 9.4,长期支持版本为Version: 8.9.8LTS
在这里插入图片描述

4.1 下载软件包

选择长期支持版本8.9.8 LTS

#1)下载软件包
[root@sonarqube ~]# cd /usr/local/src/
[root@sonarqube src]# wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-8.9.8.54436.zip

4.2 添加系统用户

[root@sonarqube ~]# useradd sonar
[root@sonarqube ~]# echo "sonar"|passwd --stdin sonar

4.3 解压安装包

[root@sonarqube src]# unzip sonarqube-8.9.8.54436.zip -d /usr/local/
[root@sonarqube src]# cd /usr/local/
[root@sonarqube local]# ln -sv /usr/local/sonarqube-8.9.8.54436 /usr/local/sonarqube
"/usr/local/sonarqube" -> "/usr/local/sonarqube-8.9.8.54436"
#改变属主数组
[root@sonarqube local]# chown -R sonar:sonar /usr/local/sonarqube/
#添加“/”保证所有文件都修改成功
[root@sonarqube local]# ll /usr/local/sonarqube/
总用量 52
drwxr-xr-x 6 sonar sonar    94 41 16:21 bin
drwxr-xr-x 2 sonar sonar    50 41 16:21 conf
-rw-r--r-- 1 sonar sonar  7651 41 16:21 COPYING
drwxr-xr-x 2 sonar sonar    24 41 16:21 data
-rw-r--r-- 1 sonar sonar 40613 41 16:24 dependency-license.json
drwxr-xr-x 7 sonar sonar   132 41 16:38 elasticsearch
drwxr-xr-x 4 sonar sonar    40 41 16:21 extensions
drwxr-xr-x 6 sonar sonar   143 41 16:38 lib
drwxr-xr-x 2 sonar sonar    24 41 16:21 logs
drwxr-xr-x 2 sonar sonar    24 41 16:21 temp
drwxr-xr-x 6 sonar sonar  4096 41 16:38 web

4.4 修改配置文件

#1)切换到sonar用户
[root@sonarqube local]# su - sonar
[sonar@sonarqube ~]$ cd /usr/local/sonarqube/conf/
[sonar@sonarqube conf]$ vim sonar.properties 
[sonar@sonarqube conf]$ grep -Ev "^$|^#" sonar.properties 
sonar.jdbc.username=sonar
sonar.jdbc.password=yanglt123.
sonar.jdbc.url=jdbc:postgresql://192.168.223.92/sonarqube

4.5 启动服务

$cd /usr/local/sonarqube/bin/linux-x86-64/
$ ./sonar.sh  start
Starting SonarQube...
Started SonarQube.

4.6 验证服务

步骤一: 连接PostgreSQL,查看sonarqube数据库是否自动创建了相关的表

在这里插入图片描述


步骤二: 检查sonarqube的服务端是否可以正常访问

http://192.168.223.92:9000
在这里插入图片描述

5、SonarQube登录配置

5.1 修改密码

默认账户: admin/admin
首次登录,强制修改密码。

注意: 要确保sonarqube数据库已经连上,并已经按照上文步骤验证

在这里插入图片描述

  • log in
    在这里插入图片描述

5.2 安装汉化插件

Administration -> Marketplace ->I understand the risk(知晓安装风险之后才会出现install)-> Plugins 中搜索 Chinese pack ,然后Install.

未确认风险:i understand the risk

在这里插入图片描述

确认风险后: i understand the risk

在这里插入图片描述

Restart Server生效

在这里插入图片描述

再次登录已经汉化

在这里插入图片描述

四、SonarScanner

1、SonarScanner安装

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

在这里插入图片描述

#1)登录jenkins服务器下载安装包
root@jenkins ~]# cd /data/devops-tools-install-pkg/
[root@jenkins devops-tools-install-pkg]# wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.7.0.2747-linux.zip


#2)解压安装
[root@jenkins devops-tools-install-pkg]# unzip sonar-scanner-cli-4.7.0.2747-linux.zip -d /usr/local/

#创建软链接
[root@jenkins devops-tools-install-pkg]# ln -sv /usr/local/sonar-scanner-4.7.0.2747-linux /usr/local/sonar-scanner
"/usr/local/sonar-scanner" -> "/usr/local/sonar-scanner-4.7.0.2747-linux"

#3)配置环境变量
[root@jenkins devops-tools-install-pkg]# vim /etc/profile
export Sonar_Home=/usr/local/sonar-scanner
export PATH=$PATH:$JAVA_HOME/bin:$Sonar_Home/bin

[root@jenkins devops-tools-install-pkg]# source /etc/profile

2、获取maven项目

#1)获取maven项目
[root@jenkins data]# git clone https://github.com/YLT001/simple-java-maven-app.git

#2) maven 构建
[root@jenkins simple-java-maven-app]# mvn clean package

#查看打包文件
[root@jenkins simple-java-maven-app]# ls -l target/ | awk '{print $NF}'
classes
maven-archiver
maven-status
my-app-1.1-SNAPSHOT.jar
surefire-reports
test-classes

3、扫描项目

方式一:指定配置文件

在这里插入图片描述
方式二:指定参数的方法
在这里插入图片描述

使用方式二创建脚本扫描

[root@jenkins simple-java-maven-app]# vim sonar_scan.sh
#!/bin/bash
projectName="demo-service"
scanTime=`date +%Y%m%d%H%M%S`

for((i=1;i<=5;i++))
do
  sonar-scanner -Dsonar.host.url=http://192.168.223.92:9000 \
  -Dsonar.projectKey=${projectName} \
  -Dsonar.projectName=${projectName} \
  -Dsonar.projectVersion=${scanTime} \
  -Dsonar.login=admin \
  -Dsonar.password=yanglt123. \
  -Dsonar.ws.timeout=30 \
  -Dsonar.projectDescription="my first project!" \
  -Dsonar.links.homepage=http://www.baidu.com \
  -Dsonar.sources=src \
  -Dsonar.sourceEncoding=UTF-8 \
  -Dsonar.java.binaries=target/classes \
  -Dsonar.java.test.binaries=target/test-classes \
  -Dsonar.java.surefire.report=target/surefire-reports
  echo "${projectName}  scan success!"
  
done

执行扫描脚本:

[root@jenkins simple-java-maven-app]# chmod +x sonar_scan.sh 
[root@jenkins simple-java-maven-app]# ./sonar_scan.sh 

在这里插入图片描述
执行效果:
在这里插入图片描述


参考博客:

https://www.cnblogs.com/mascot1/p/11295048.html
https://blog.csdn.net/qq_23936389/article/details/119312848

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旅行者-Ylt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值