sonarqube 代码质量检测
介绍
主要检测,代码规范,代码错误,代码漏洞。
-
SonarQube基础java开发,需安装open JDK8版本
-
SonarQube需要依赖MySQL数据库,至少5.6版本以上
-
SonarQube的小型实例至少4G内存,如果大型实例需要16G内存
在7.6以后版本,需要安装JDK11,并且不再支持MySQL需要使用PostgreSQL
PostgreSQL部署
# 更换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
# 修改yum源
[root@web01 ~]# sed -i 's#gpgcheck=1#gpgcheck=0#g' /etc/yum.repos.d/pgdg-redhat-all.repo
# 安装
[root@web01 ~]# yum install -y postgresql13-server
# 初始化
[root@web01 ~]# /usr/pgsql-13/bin/postgresql-13-setup initdb
# 启动postgre
[root@web01 ~]# systemctl start postgresql-13
# 启动报错原因
"/var/lib/pgsql/13/data/" is missing or empty.
# 切换用户
[root@web01 ~]# su - postgres
# 登录交互式终端
-bash-4.2$ psql
# 创建用户
postgres=# create user sonar_user with password '123';
# 创建数据库
postgres=# create database sonar_db owner sonar_user;
# 修改权限
postgres=# grant all on database sonar_db to sonar_user;
# 测试链接数据库
[root@web01 ~]# psql -d sonar_db -U sonar_user -h127.0.0.1
安装sonar(10.1)
# 0.优化
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.上传sonarzip包
[root@web02 ~]# ll
-rw-rw-rw- 1 root root 366656421 Aug 29 10:21 sonarqube-10.1.0.73491.zip
#2.创建安装目录并解压sonarzip包至安装目录
[root@web02 ~]# mkdir /app
[root@web02 ~]# unzip sonarqube-10.1.0.73491.zip
[root@web02 ~]# mv sonarqube-10.1.0.73491 /app/sonarqube-10.1
[root@web02 ~]# ll /app/
total 0
drwxr-xr-x 11 root root 172 Jun 20 13:51 sonarqube-10.1
#3.创建软连接
[root@web02 ~]# ln -s /app/sonarqube-10.1/ /app/sonarqube
[root@web02 ~]# ll /app/
total 0
lrwxrwxrwx 1 root root 20 Aug 29 19:01 sonarqube -> /app/sonarqube-10.1/
#4.修改配置文件
[root@web02 ~]# cd /app/sonarqube
[root@web02 sonarqube]# vim conf/sonar.properties
sonar.jdbc.username=sonar_user
sonar.jdbc.password=123
#5.安装jdk环境
[root@web02 ~]# wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
[root@web02 ~]# tar zxf jdk-17_linux-x64_bin.tar.gz
[root@web02 ~]# rm -rf jdk-17_linux-x64_bin.tar.gz
[root@web02 ~]# mv jdk-17.0.8 jdk-17
[root@web02 ~]# mv jdk-17 /usr/local/
[root@web02 ~]# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/jdk-17
export PATH=/usr/local/php/bin:/usr/local/jdk-17/bin:$PATH
[root@web02 ~]# source /etc/profile
#6.创建sonar用户并授权
[root@web02 sonarqube]# useradd sonar
[root@web02 sonarqube]# chown -R sonar:sonar /app/sonarqube*
#7.启动服务并查看端口
[root@web02 sonarqube]# su sonar /app/sonarqube/bin/linux-x86-64/sonar.sh start
[root@web02 sonarqube]# netstat -tupln | grep 9000
tcp6 0 0 :::9000 :::* LISTEN 22408/java
汉化sonar
# 重启sonar即可
su sonar /app/sonarqube/bin/linux-x86-64/sonar.sh restart
生成token
squ_7829c7828b146ca06e463e1883673985bbe29f64
创建项目
#代码验证 //移动到jenkins工作目录下
[root@jenkins ~]# cd /var/lib/jenkins/workspace/hello-world-maven
[root@jenkins hello-world-maven]# mvn clean verify sonar:sonar \
-Dsonar.projectKey=java \
-Dsonar.projectName='java' \
-Dsonar.host.url=http://10.0.0.7:9000 \
-Dsonar.token=squ_7829c7828b146ca06e463e1883673985bbe29f64
报错:执行 Maven 插件的过程中遇到了 API 不兼容性问题。具体来说,问题是由于不同版本的 Java 编译造成的
解决方法:升级java或者降低maven版本
#更换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/
# 配置环境变量
cat <<"EOF">/etc/profile.d/maven39.sh
export MAVEN_HOME=/usr/lib/apache-maven-3.9.4
export PATH=$PATH:$MAVEN_HOME/bin
EOF
# 修改maven下载源
vim /usr/lib/apache-maven-3.9.4/conf/settings.xml
<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
# 生效当前配置
source /etc/profile
# 查看HOME路径
[root@jenkins ~]# mvn --version
Apache Maven 3.9.4 (dfbb324ad4a7c8fb0bf182e6d91b0ae20e3d2dd9)
Maven home: /usr/lib/apache-maven-3.9.4
Java version: 11.0.20, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-11-openjdk-11.0.20.0.8-1.el7_9.x86_64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"
# java变量设置
vim /etc/profile.d/java11.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
网页修改信息:
# 重新代码验证
[root@jenkins ~]# cd /var/lib/jenkins/workspace/hello-world-maven
[root@jenkins hello-world-maven]# mvn clean verify sonar:sonar \
-Dsonar.projectKey=java \
-Dsonar.projectName='java' \
-Dsonar.host.url=http://10.0.0.7:9000 \
-Dsonar.token=squ_7829c7828b146ca06e463e1883673985bbe29f64
安装sonar(7.7)
sonarqube安装前优化
## 至少2G运行内存 要装SonarQube要先做以下优化
[root@sonarqube ~]# sysctl -w vm.max_map_count=262144
vm.max_map_count = 262144
[root@sonarqube ~]# sysctl -w fs.file-max=65536
fs.file-max = 65536
[root@sonarqube ~]# ulimit -n 65536
[root@sonarqube ~]# ulimit -u 2048
[root@sonarqube ~]# vim /etc/sysctl.conf
vm.max_map_count=262144
fs.file-max=65536
## 文件描述符
[root@sonarqube ~]# vim /etc/security/limits.conf
* - nofile 65536
sonarqube - nproc 2048
sonarqube部署
# 先要安装jdk
[root@sonarqube ~]# yum install -y java
# 二进制安装mysql5.7
mysql> create database sonar charset utf8;
mysql> grant all on *.* to sonar@'localhost' identified by '123';
# 安装sonarqube7.7版本 并解压
[root@sonarqube ~]# wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.7.zip
[root@sonarqube ~]# mkdir /app
[root@sonarqube ~]# unzip sonarqube-7.7.zip -d /app/
# 软链接
[root@sonarqube ~]# ln -s /app/sonarqube-7.7 /app/sonarqube
# 创建sonar用户
[root@sonarqube ~]# useradd sonar
# 授权
[root@sonarqube ~]# chown -R sonar.sonar /app/sonarqube*
# 修改sonar配置文件
[root@sonarqube ~]# vim /app/sonarqube/conf/sonar.properties
sonar.jdbc.username=sonar
sonar.jdbc.password=123
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
# 启动sonar
[root@sonarqube ~]# su - sonar -c '/app/sonarqube/bin/linux-x86-64/sonar.sh start'
# 检查端口
[root@sonarqube ~]# netstat -lntup
cp6 0 0 :::9000 :::* LISTEN 11531/java
## 打开浏览器访问:http://10.0.0.8:9000/about
# token
e82aded3dc92ade7232143c12f62d67c4b448aad
## 去jenkins的机器上执行一次 网页就会显示代码检测的结果了
# 进入jenkins工作目录
[root@jenkins ~]# cd /var/lib/jenkins/workspace/hello-world-maven
# 检测
[root@jenkins hello-world-maven]# mvn sonar:sonar \
-Dsonar.projectKey=e82aded3dc92ade7232143c12f62d67c4b448aad \
-Dsonar.host.url=http://10.0.0.8:9000 \
-Dsonar.login=e82aded3dc92ade7232143c12f62d67c4b448aad
将sonar集成到jenkins
配置sonar server
配置sonar scanner
系统管理 -> 全局工具配置 -> SonarQube Scanner 安装