代码质量扫描工具(SonarQube)
质量评审
SonarQube有四个关键组件
◼ SonarQube Server运行有三个组件
◆ Web Server:UI
◆ Search Server:为UI提供搜索功能,基于ElasticSearch
◆ Compute Engine Server:处理代码分析报告并将之存储到SonarQube Database中
◼ SonarQube Database:负责存储SonarQube的配置,以及项目的质量快照等
◼ SonarQube Plugin
◼ Code analysis Scanners:代码扫描器,扫描后将报告提交给SonarQube Server
下载
https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-10.2.1.78527.zip
apt update && apt install openjdk-11-jdk
root@ubuntu20:~# sysctl -w vm.max_map_count=524288
vm.max_map_count = 524288
sysctl -w fs.file-max=131072
添加到/etc/sysctl.conf
vm.max_map_count = 524288
fs.file-max=131072
sysctl -p
部署步骤1:安装Postgresql 12
apt install postgresql -y
pg_createcluster 12 main --start #初始化并启动
部署步骤2:配置Postgresql 12
root@ubuntu20:~# vi /etc/postgresql/12/main/postgresql.conf
listen_addresses = ‘*’
root@ubuntu20:/etc/postgresql/12/main# vi pg_hba.conf
host all all 0.0.0.0/0 md5
root@ubuntu20:/etc/postgresql/12/main# systemctl restart postgresql
root@ubuntu20:/etc/postgresql/12/main# systemctl enable postgresql
部署步骤3:为SonarQube初始化数据库
创建用户并授权
root@ubuntu20:/etc/postgresql/12/main# su - postgres
postgres@ubuntu20:~$ psql -U postgres
psql (12.16 (Ubuntu 12.16-0ubuntu0.20.04.1))
Type “help” for help.
postgres=# CREATE USER sonarqube WITH ENCRYPTED PASSWORD ‘magedu.com’;
postgres=# CREATE DATABASE sonarqube OWNER sonarqube;
CREATE DATABASE
postgres=# GRANT ALL PRIVILEGES ON DATABASE sonarqube TO sonarqube;
GRANT
postgres=# ALTER USER postgres WITH ENCRYPTED PASSWORD ‘www.magedu.com’;
ALTER ROLE
部署步骤4:测试Postgresql数据库的连通性
root@ubuntu20:/etc/postgresql# psql -U sonarqube -h 192.168.1.52
部署步骤5:安装SonarQube
root@ubuntu20:/usr/local# unzip sonarqube-10.2.1.78527.zip -d /usr/local
cd /usr/local/
root@ubuntu20:/usr/local# ln -sv sonarqube-10.2.1.78527/ sonarqube
创建用于运行SonarQube的普通用户,并将安装目录下的文件授权该用户访问
useradd -m sonarqube
chown -R sonarqube.sonarqube /usr/local/sonarqube/*
部署步骤6: 配置SonarQube
配置SonarQube,编辑conf/sonar.properties配置文件,修改关键参数
root@ubuntu20:/usr/local/sonarqube/conf# vi sonar.properties
修改连接数据库的账号和密码
sonar.jdbc.username=sonarqube
sonar.jdbc.password=magedu.com
修改数据库相关的URL,这里以此前配置的postgresql为例,其中的localhost为DB服务器的地址,而sonarqube为数据库名称;
sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube
#设定Web Server监听的地址和端口
sonar.web.host=0.0.0.0
sonar.web.port=9000
如有必要,可修改SonarQube持久存储数据的位置,以下两个相对路径,均起始于sonarqube的安装目录,我们也可以使用绝对路径;
sonar.path.data=data
sonar.path.temp=temp
启动
root@ubuntu20:/usr/local/sonarqube/conf# su - sonarqube -c “/usr/local/sonarqube/bin/linux-x86-64/sonar.sh start”
/usr/bin/java
Starting SonarQube…
Started SonarQube.
启动不了,可能跟java版本有关,太低,安装17版本后成功启动
访问
http://192.168.1.52:9000/
默认用户和密码admin
修改密码为qq号
sonar-scanner-cli-5.0.1.3006-linux.zip
下载
https://docs.sonarsource.com/sonarqube/latest/analyzing-source-code/scanners/sonarscanner/
root@ubuntu20:~# ln -sv /usr/local/sonar-scanner-5.0.1.3006-linux/ /usr/local/sonar-scanner
定义分析参数
root@ubuntu20:/usr/local/sonar-scanner/conf# vi sonar-scanner.properties
sonar.host.url=http://localhost:9000
sonar.sourceEncoding=UTF-8
sonar.login=jenkins
sonar.password=2368756722
sonar.log.level=INFO
sonar.verbose=false
克隆项目
项目里定义文件
root@ubuntu20:~/spring-boot-helloWorld# cat sonar-project.properties
# 项目的惟一标识
sonar.projectKey= spring-boot-helleworld
# 项目的名称,用于显示在sonar web中
sonar.projectName=spring-boot-helleworld
# 项目的版本
sonar.projectVersion=0.9.8
# 需要分析的源码所在的目录
sonar.sources=.
# targe的位置
sonar.java.binaries=.
# 指定项目中使用的编程语言
sonar.language=java
#编码格式
sonar.sourceEncoding=UTF-8
root@ubuntu20:~/spring-boot-helloWorld# /usr/local/sonar-scanner/bin/sonar-scanner
配置Jenkins接入SonarQube进行代码质量评估
配置Jenkins使用sonar-scanner进行代码质量扫描,并
将结果报告给SonarQube Server的主要步骤如下
◼ 首先,在Jenkins上安装SonarQube Scanner插件
◼ 其次,配置Jenkins对接到SonarQube Server
◼ 第三,配置Jenkins的全局工具sonar-scanner
◼ 第四,在SonarQube上添加回调Jenkins的Webhook
◼ 第五,在Jenkins项目上调用sonar-scanner进行代码质
量扫描
◼ 最后,通过SonarQube确认扫描结果的评估;
认证到 SonarQube Server
SonarQube Server拒绝匿名访问时,需要配置Jenkins上的Sonar-Scanner工具可自动完成认证
◼ 在SonarQube上创建用户账号(不建议使用admin账号)
◆配置 → 权限 → 用户
◼ 为用户账号赋予相应的权限,例如执行分析和置备项目
◆配置 → 权限 → 全局权限
◼ 以新建用户的身份生成令牌,该令牌将被Jenkins用于通过相应的URL打开SonarQube 设定用户权限
为用户生成认证用的token
Token在创建完成
并离开创建页面后
无法再次获取
squ_6ed44e92760413ab3006cf2a7461796c5c2f0295
将SonarQube令牌存储为Jenkins凭证
在Jenkins上保存SonarQube上Jenkins用户的令牌为凭证,凭证类型为Secret text;
Manage Jenkins → Manage Credentials
在Jenkins上添加SonarQube Server
在Jenkins的配置中,添加SonarQube Server,并选择打开该Server时使用的令牌凭证
◼ Manage Jenkins → Configure System → SonarQube Servers
在SonarQube添加Jenkins的回调接口
root@ubuntu20:~# openssl rand -hex 16
534e2dc624946e3339e45ecfd8d4d716
生成密码,只要和Jenkins保持一致即可
Jenkins配置SonarQube servers
SonaQube-Server
填写 http://192.168.1.52:9000 这个是sonarqube的服务器地址
并添加secret ,
为Jenkins添加sonar-scanner工具
为Jenkins添加全局工具sonar-scanner,以便在构建任务中调用
◼ Manage Jenkins → 全局工具配置
流水线添加构建后操作: sonarqube
clean test package sonar:sonar -Dsonar.host.url=http://192.168.1.52:9000 -Dsonar.login=${sonarToken}
也可以在shell中调用代码质量扫描