所需环境:
SonarQube: 8.4.2
java: java11(这个必须要java11,对应sonarqube8版本,使用java15或者jdk1.8都不行,只能java11,否则会出现版本不对或者启动jvm参数错误)
PostgreSQL: 12.4 (SonarQube已经不支持mysql了,这里使用PostgreSQL)
SonarScanner 4.4.0.2170
sonar官网下载太慢,可以到下面的地址下载,pgsql直接去官网下载
https://binaries.sonarsource.com/Distribution/
安装postgresql
创建postgres用户
# useradd postgres
# passwd postgres
编译安装postgre
# tar -zxf postgresql-12.4.tar.gz
# cd postgresql-12.4
# ./configure --prefix=/usr/local/pgsql/
//编译时候会报错,需要装readline,直接yum安装readline-devel即可
# make && make install
// 加入环境变量
# vim /etc/profile
末尾加入
# PGSQL
PGHOME=/usr/local/pgsql
PGDATA=/data/postgresql/data
PATH=$PGHOME/bin:$PATH
export PGHOMD PGDATA PATH
// source变量
# source /etc/profile
目录授权相关设置
// 创建data目录
# mkdir -p /data/postgresql/data/
# chown postgres.postgres /data/postgresql/data/
# chown postgres.postgres /usr/local/pgsql/
// 拷贝启动文件,先进入源安装文件目录
# cp contrib/start-scripts/linux /etc/init.d/postgresqld
// 修改basedir , datadir 和log文件位置
vim /etc/init.d/postgresqld
prefix=/usr/local/pgsql
PGDATA="/data/postgresql/data"
PGLOG="$PGDATA/serverlog"
# chmod +x /etc/init.d/postgresqld
切换用户
su - postgres
初始化pgsql
$ cd /usr/local/pgsql/bin
$ ./initdb --pgdata=/data/postgresql/data/
修改登录配置
$ vim /data/postgresql/data/postgresql.conf
listen_addresses = '*'
修改权限配置
$ vim /data/postgresql/data/pg_hba.conf
// 主要修改ipv4相关的内容, local为本地相关配置,host为远程相关配置,md5为密码登录, trust为信任模式,不需要密码
local all all trust
# IPv4 local connections:
host all all 0.0.0.0/0 md5
启动pgsql
$ /etc/init.d/postgresqld start
// 输入postgres的密码,显示ok为启动成功
创建sonarqube使用的相关数据库和角色权限
1. 使用 pgadmin登录pgsql数据库,创建sonar数据和sonar用户,并为用户设置密码(具体步骤可度娘)
安装SonarQube
// 创建sonar用户,sonarqube不能以root启动
# useradd sonar
# unzip sonarqube-8.4.2.36762.zip
# mv sonarqube-8.4.2 /opt/sonar
# chown sonar.sonar /opt/sonar
修改配置文件
# vim conf/sonar.properties
// 看好jdbc链接参数, 模版文件参数有后缀, 需要删除, 否则sonar无法启动log无报错, 但数据库log有错误显示
sonar.jdbc.url=jdbc:postgresql://127.0.0.1/sonar
sonar.jdbc.username=postgres
sonar.jdbc.password=postgres
sonar.web.host=0.0.0.0
sonar.web.port=9000
PS: 查看配置里相关端口,如有和现有服务冲突的,需要修改,否则程序无法启动
# vim conf/wrapper.conf
// 由于现有项目使用的是jdk1.8,所以jdk11无法加入环境变量,直接指定
wrapper.java.command=/usr/local/java/jdk-11.0.8/bin/java
修改系统相关配置(这里根据log报错来,不同版本可能不一样,百度一搜一堆)
# vim /etc/sysctl.conf
vm.max_map_count = 262144
使配置生效
# sysctl -p
// 修改limits参数
# vim /etc/security/limits.conf
// sonar为sonarqube专门创建的启动用户
sonar hard nofile 65536
sonar soft nofile 65536
启动sonarqube
# su - sonar
$ /opt/sonar/bin/linux-x86-64/sonar.sh start
这玩意一次完美启动太难了,估计都会有问题,反正就看日志,百度吧,重点是es.log,这几个日志加上pgsql的日志,基本上就能定位出问题所在
启动之后,如果log无报错,输出正常,就可以打开页面了
输入http://IP:9000,帐号口令都为admin
本地安装SonarScanner
# unzip sonar-scanner-cli-4.4.0.2170-linux.zip
# mv sonar-scanner-cli-4.4.0.2170-linux /opt/sonar-scanner
修改配置文件
# vim /opt/sonar-scanner/conf/sonar-scanner.properties
#----- Default SonarQube server
sonar.host.url=http://localhost:9000
#----- Default source code encoding
sonar.sourceEncoding=UTF-8
sonar.login=admin
sonar.password=admin
加入环境变量
# vim /etc/profile
末尾加入
# SONAR-SCANNER
SCANNERHOME=/opt/sonar-scanner
PATH=$SCANNERHOME/bin:$PATH
export PATH
# source /etc/profile
测试:
找到一个项目,在项目中创建sonar-project.properties文件,文件内容大概为:
#required metadata
#projectKey项目的唯一标识,不能重复
sonar.projectKey=sonar_test_freestyl
sonar.projectName=sonar_test_freestyl
sonar.projectVersion=1.0
sonar.sourceEncoding=UTF-8
sonar.scm.disabled=true
#sonar.login=929abf38877faf84da0b579cc5bac6521a486ddf
sonar.java.sources=1.8
sonar.java.target=1.8
sonar.java.binaries=.
# 扫描目录,相对于basedir
sonar.sources=src,dist
sonar.projectBaseDir=.
sonar.exclusions=**./target/**,**/test/**,**/node_modules/**
在目录下使用sonar-scanner进行扫描,扫描后登录sonarqube后台查看扫描结果
SonarQube整合到jenkins
安装插件SonarQube Scanner for Jenkins
jenkins->系统管理->全局配置
1. 加入SonarQube Scanner
2. 加入java11变量(sonarqube需要jdk11)
jenkins->系统管理->系统配置->SonarQube servers
加入SonarQube服务器相关信息
注意: 这里的认证不能使用账号密码,否则无法添加,这里需要两步:
1.在SonarQube后台创建token(我的帐号->安全选项中)
2. 在jenkins凭证管理中创建对应认证
全部配置完成后, 就可以在项目中启用SonarQube进行代码质量扫描了
自由风格项目或者maven项目
一般在构建之后,发布之前,选择,配置如下
保存,构建,有错排错,没错继续研究优化
pipeline流水线语法
创建sonar-project.properties文件,放到项目根目录
# vim sonar-project.properties
#required metadata
#projectKey项目的唯一标识,不能重复, 这里不能用变量了
sonar.projectKey=pipeline_test
sonar.projectName=pipeline_test
sonar.projectVersion=1.0
sonar.sourceEncoding=UTF-8
sonar.scm.disabled=true
#sonar.login=admin
#sonar.passwd=admin
#sonar.login=929abf38877faf84da0b579cc5bac6521a486ddf
sonar.java.sources=1.8
sonar.java.target=1.8
sonar.java.binaries=.
sonar.sources=src
sonar.projectBaseDir=.
#sonar.exclusions=**./target/**,**/test/**,**/node_modules/**
pipeline语法
① 使用jenkins集成的sonarscanner进行扫描(这种方式可以在项目左侧集成一个sonarqube工作模块,缺点是,一些扫描路径过长,容易使tomcat内存溢出)
stage('代码质量检查'){
when { environment name: 'Chioce', value: 'Deploy' }
steps{
script {
// 这里和全局变量的配置对应
sonarHome = tool 'SonarScanner_Auto'
}
// 这里和系统配置里Sonar服务器名称对应
withSonarQubeEnv('SonarQubeServer') {
sh "${sonarHome}/bin/sonar-scanner"
}
}
}
② 使用shell调用本地sonarscanner命令进行扫描
stage('代码质量检查'){
when { environment name: 'Chioce', value: 'Deploy' }
steps{
// 调用本地sonar-scanner
sh 'sonar-scanner'
}
}
}