Jenkins-SonarQube-代码质量测试
1、基础知识
1.1、什么是SonarQube
SonarQube 是一个用于代码质量管理的开放平台,通过插件机制,SonarQube可以集成不同的测试工具,代码分析工具,以及持续集成工具,例如 Hudson/Jenkins 等。 官方网站:http://www.sonarqube.org/ 下载地址:https://www.sonarqube.org/downloads/
1.2、七个维度检测代码质量
1、复杂度分布:代码复杂度过高将难以理解
2、重复代码:程序中包含大量复制、粘贴的代码而导致代码臃肿,sonar 可以展示源码中重复严重的地方
3、单元测试统计:统计并展示单元测试覆盖率,开发或测试可以清楚测试代码的覆盖情况
4、代码规则检查:检查代码是否符合规范
5、注释率:若代码注释过少,特别是人员变动后,其他人接手比较难接手;若过多,又不利于阅读
6、潜在的 Bug:检测潜在的 bug
7、结构与设计:找出循环,展示包与包、类与类之间的依赖、检查程序之间耦合度
1.3、SonarQube工作流程图
1.4、版本说明
7.9.x 版本不再支持 MySQL https://docs.sonarqube.org/latest/setup/upgrade-notes/ MySQL No Longer Supported SonarQube no longer supports MySQL. To migrate from MySQL to a supported database, see the free MySQL Migrator tool.
2、基础环境准备
2.1、sonarqube软件
2.1.1、软件下载
https://www.sonarsource.com/products/sonarqube/downloads/
sonarqube-9.9.1.69595.zip
2.2、软件依赖版本要求
https://docs.sonarqube.org/latest/requirements/prerequisites-and-overview/
2.2.1、java版本要求
2.2.2、数据库的要求
2.2.3、浏览器的要求
2.3、系统及内核参数
2.3.1、创建用户
useradd -s /sbin/nologin -m sonarqube
2.3.2、设置文件打开数、用户进程数
# 配置目录/etc/security/limits.d/99-sonarqube.conf或/etc/security/limits.conf cat << 'CAT_END' >> /etc/security/limits.conf sonarqube - nofile 262144 sonarqube - nproc 65535 CAT_END # 全局配置 sysctl -w vm.max_map_count=524288 sysctl -w fs.file-max=65535 ulimit -n 524288 ulimit -u 65535 cat << 'CAT_END' >>/etc/sysctl.conf vm.max_map_count=524288 fs.file-max=65535 CAT_END
3、部署 SonarQube
3.1、安装JDK
# 查看版本 apt-cache madison openjdk-17-jdk # 安装JDK17 apt install openjdk-17-jdk
3.2、安装PostgreSQL
3.2.1、安装
# 查看版本 apt-cache madison postgresql # 安装 apt install -y postgresql
3.2.2、创建数据库、登陆帐号、授权等配置
# 切换用户 su - postgres # 登陆数据库 psql -U postgres # 创建数据库 create database sonar; # 创建用户并且设置密码 create user sonar with encrypted password 'sonar'; # 授权 grant all privileges on database sonar to sonar; # 修改数据库sonar所有者 alter database sonar owner to sonar;
3.2.3、设置监听IP地址为所有
# vim /etc/postgresql/15/main/postgresql.conf ... listen_addresses ='*' ...
3.2.4、开启远程访问
# vi /etc/postgresql/15/main/pg_hba.conf # IPv4 local connections: host all all 127.0.0.1/32 scram-sha-256 host all all 0.0.0.0/0 scram-sha-256
3.2.5、启动服务
# systemctl start postgresql # ss -tunlp | grep postgre tcp LISTEN 0 244 127.0.0.1:5432 0.0.0.0:* users:(("postgres",pid=5932,fd=5)) tcp LISTEN 0 244 127.0.1.1:5432 0.0.0.0:* users:(("postgres",pid=5932,fd=6))
3.3、安装SonarQube
3.3.1、下载软件
mkdir -p /data/softs && cd /data/softs
curl -O https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.9.1.69595.zip
3.3.2、安装软件
apt install -y unzip mkdir /data/servers && cp /data/softs/sonarqube-9.9.1.69595.zip /data/servers/ cd /data/servers/ && unzip sonarqube-9.9.1.69595.zip && rm -f sonarqube-9.9.1.69595.zip chown -R sonarqube:sonarqube sonarqube-9.9.1.69595 ln -s /data/servers/sonarqube-9.9.1.69595 /usr/local/sonar
3.3.3、配置
# 切换用户 su - sonarqube # 配置数据库链接信息 sonarqube@localhost:~$ egrep -iv '^$|^#' /usr/local/sonar/conf/sonar.properties sonar.jdbc.username=sonar sonar.jdbc.password=sonar sonar.jdbc.url=jdbc:postgresql://192.168.10.28:5432/sonar
3.3.4、启动sonar服务
# 命令帮助信息 sonarqube@localhost:~$ /usr/local/sonar/bin/linux-x86-64/sonar.sh /usr/bin/java Usage: /usr/local/sonar/bin/linux-x86-64/sonar.sh { console | start | stop | force-stop | restart | status | dump } sonarqube@localhost:~$ /usr/local/sonar/bin/linux-x86-64/sonar.sh start /usr/bin/java Starting SonarQube... Started SonarQube.
3.3.5、查看日志和检查端口
# 日志 sonarqube@localhost:~$ tail -f /usr/local/sonar/logs/sonar.log # 显示如下,表示启动正常 2023.06.19 10:28:35 INFO app[][o.s.a.SchedulerImpl] Process[ce] is up 2023.06.19 10:28:35 INFO app[][o.s.a.SchedulerImpl] SonarQube is operational # 检查端口 sonarqube@localhost:~$ ss -tunlp | grep java tcp LISTEN 0 50 [::ffff:127.0.0.1]:43901 *:* users:(("java",pid=6879,fd=38)) tcp LISTEN 0 4096 [::ffff:127.0.0.1]:9001 *:* users:(("java",pid=6694,fd=78)) tcp LISTEN 0 4096 [::ffff:127.0.0.1]:33007 *:* users:(("java",pid=6694,fd=76)) tcp LISTEN 0 25 *:9000 *:* users:(("java",pid=6772,fd=12))
3.3.6、浏览器登陆sonarqube服务
默认帐号和密码都是admin
3.3.7、主页面
3.4、安装中文插件Chinese Pack
3.4.1、安装插件
3.4.2、汉化完成的效果
4、jenkins 服务器部署扫描器 sonar-scanner
4.1、软件下载
参考地址:https://docs.sonarcloud.io/advanced-setup/ci-based-analysis/sonarscanner-cli/
cd /data/softs/ && curl -O https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.7.0.2747-linux.zip
4.2、部署sonar-scanner
4.2.1、安装软件
unzip sonar-scanner-cli-4.7.0.2747-linux.zip -d /data/server/
ln -s /data/server/sonar-scanner-4.7.0.2747-linux /usr/local/sonar-scanner
4.2.2、配置
# grep -Ev '^$|^#' /usr/local/sonar-scanner/conf/sonar-scanner.properties sonar.host.url=http://192.168.10.28:9000 sonar.sourceEncoding=UTF-8 sonar.login=admin sonar.password=root
4.3、准备测试代码
4.3.1、到sonarqube服务上【关闭强制认证】
4.3.2、下载测试代码
sonar插件提供了一个代码库 github:https://github.com/SonarSource/sonar-examples 软件包下载:https://github.com/SonarSource/sonar-examples/archive/master.zip
4.3.3、进入php测试代码
unzip sonar-examples-master.zip
cd sonar-examples-master/projects/languages/php/php-sonar-runner
4.3.4、sonar-project.properties配置解析
root@localhost:~/sonar-examples-master/projects/languages/php/php-sonar-runner# cat sonar-project.properties # Required metadata sonar.projectKey=org.sonarqube:php-simple-sq-scanner # 自定义项目 key sonar.projectName=PHP :: Simple Project :: SonarQube Scanner # 项目名称,会显示在 web sonar.projectVersion=1.0 # 项目版本 # 源代码目录 sonar.sources=src # 代码语言类型 sonar.language=php # 编码格式 sonar.sourceEncoding=UTF-8
4.3.5、在源代码目录执行扫描
root@localhost:~/sonar-examples-master/projects/languages/php/php-sonar-runner# /usr/local/sonar-scanner/bin/sonar-scanner ... INFO: Analysis report generated in 132ms, dir size=139.9 kB INFO: Analysis report compressed in 28ms, zip size=24.1 kB INFO: Analysis report uploaded in 121ms INFO: ANALYSIS SUCCESSFUL, you can find the results at: http://192.168.10.28:9000/dashboard?id=org.sonarqube%3Aphp-simple-sq-scanner INFO: Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report INFO: More about the report processing at http://192.168.10.28:9000/api/ce/task?id=AYjUOlT8vuQIIDUYw2zj INFO: Analysis total time: 13.689 s INFO: ------------------------------------------------------------------------ INFO: EXECUTION SUCCESS INFO: ------------------------------------------------------------------------ INFO: Total time: 15.883s INFO: Final Memory: 19M/104M INFO: ------------------------------------------------------------------------
4.3.6、sonarquebe web 界面验证扫描结果
5、jenkins执行代码扫描
5.1、jenkins 安装 SonarQube 插件
安装插件 SonarQube Scanner,然后配置 SonarQube server,系统管理-系统设置。
5.2、Jenkins配置-SonarQube
5.2.1、sonar创建令牌
5.2.2、增加凭据
sonar创建令牌复制到此处
5.2.3、Jenkins配置Sonar
Jenkins—系统管理—系统设置--SonarQube servers
5.3、jenkins 添加 Sonar scanner 扫描器
Jenkins--系统管理-全局工具配置
6、Jenkins创建项目测试
6.1、准备代码【到github】
# 这里只取php测试示例 sonar插件提供了一个代码库 github:https://github.com/SonarSource/sonar-examples 软件包下载:https://github.com/SonarSource/sonar-examples/archive/master.zip
6.2、创建jenkins项目my-php-sonar
6.3、配置Scanner扫描
# Required metadata sonar.projectKey=org.sonarqube:php-simple-sq-scanner sonar.projectName=PHP :: Simple Project :: SonarQube Scanner sonar.projectVersion=1.0 # Comma-separated paths to directories with sources (required) sonar.sources=./php-sonar-runner/src # Language sonar.language=php sonar.login=admin # 需要配置用户名 #sonar.password=squ_fcaeb5bd15fa11202c16755623bafd3eee3eb246 # 此处不用写,因为我们已经设置全局token认证