编辑
2025-09-18
Devops
00
请注意,本文编写于 45 天前,最后修改于 44 天前,其中某些信息可能已经过时。

目录

一、Sonar Qube介绍
二、安装Sonar Qube
三、启动后访问,然后修改密码,安装中文插件
四、下载扫描器
在项目所在目录执行以下命令
五、集成到jenkins
六、再配置构建完成后的代码质量检测

一、Sonar Qube介绍

Sonar Qube是一个开源的代码分析平台,支持Java、Python、PHP、JavaScript、CSS等25种以上的语言,可以检测出重复代码、代码漏洞、代码规范和安全性漏洞的问题。

Sonar Qube可以与多种软件整合进行代码扫描,比如Maven,Gradle,Git,Jenkins等,并且会将代码检测结果推送回Sonar Qube并且在系统提供的UI界面上显示出来

二、安装Sonar Qube

采用docker-compose的方式安装

yml
version: "3.1" # 声明使用的Docker Compose语法版本 services: # 定义容器服务列表 db: # 服务1:PostgreSQL数据库容器 image: postgres # 使用官方PostgreSQL镜像 container_name: db # 显式指定容器名称(而非自动生成) ports: - 5432:5432 # 将容器内5432端口映射到宿主机同端口 networks: - sonarnet # 连接到自定义网络 environment: # 设置环境变量(数据库配置) POSTGRES_USER: sonar # 创建默认用户名为sonar POSTGRES_PASSWORD: sonar # 设置用户密码为sonar sonarqube: # 服务2:SonarQube代码质量分析平台 image: sonarqube:8.9.6-community # 指定SonarQube社区版8.9.3镜像 container_name: sonarqube # 显式命名容器 depends_on: # 声明依赖关系(先启动db服务) - db ports: - "9000:9000" # 暴露Web管理界面端口 networks: - sonarnet # 使用同一自定义网络 environment: # SonarQube连接数据库的配置 SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar # 通过服务名db访问PostgreSQL SONAR_JDBC_USERNAME: sonar # 使用db服务中定义的用户名 SONAR_JDBC_PASSWORD: sonar # 使用db服务中定义的密码 networks: # 自定义网络配置 sonarnet: # 网络名称 driver: bridge # 使用桥接模式(默认网络驱动)
js
‌双容器架构‌ PostgreSQL容器作为SonarQube的专用数据库 SonarQube容器提供代码扫描的Web服务 ‌网络隔离‌ 通过sonarnet自定义网络实现: 容器间可通过服务名直接通信(如jdbc:postgresql://db:5432) 与外部网络隔离增强安全性 ‌关键配置‌ 数据库认证信息通过环境变量动态注入 端口映射使宿主机可访问: 9000SonarQube管理界面 5432:可选暴露数据库端口(生产环境建议移除) ‌版本控制‌ 明确指定SonarQube版本(8.9.6社区版) 使用稳定的PostgreSQL官方镜像 启动命令建议:docker-compose up -d 访问地址:http://localhost:9000(首次启动需等待约2分钟初始化)

启动后日志报错,说虚拟内存不足需要更改,然后重新启动

js
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf sudo sysctl -p

三、启动后访问,然后修改密码,安装中文插件

http://192.168.201.106:9000/ 默认账号和密码都是admin,第一次登录后需要修改密码

image.png

由于我版本是8.9.6插件已经是10.0版本无法安装,只能通过上传jar到容器内重启SonarQube完成

js
docker cp sonar-l10n-zh-plugin-8.9.jar 5104b8dcff76:/opt/sonarqube/extensions/downloads

四、下载扫描器

https://docs.sonarsource.com/sonarqube-server/latest/analyzing-source-code/scanners/sonarscanner/

image.png

下载解压后,移动到Jenkins的数据卷中

js
mv /songxuan/sonar-scanner-4.8.0.2856-linux/ ./

然后配置

js
vi /jenkins/data/sonar-scanner-4.8.0.2856-linux/conf/sonar-scanner.properties
js
# Configure here general information about the environment, such as the server connection details for example # No information about specific project should appear here #----- SonarQube server URL (default to SonarCloud) sonar.host.url=http://192.168.201.106:9000 #sonar.scanner.proxyHost=myproxy.mycompany.com #sonar.scanner.proxyPort=8002 sonar.sourceEncoding=UTF-8

然后生成一个令牌 image.png

在项目所在目录执行以下命令

js
/jenkins/data/sonar-scanner-4.8.0.2856-linux/bin/sonar-scanner \ -Dsonar.sources=/jenkins/data/workspace/mytest1 \ -Dsonar.projectname=mytest1 \ -Dsonar.projectKey=mytest1 \ -Dsonar.java.binaries=/jenkins/data/workspace/mytest1/target/ \ -Dsonar.login=0e19bdffcf64ce49a7f2def0cc2a7d8460d2b6e3 \ -Dsonar.host.url=http://192.168.201.106:9000

然后扫描该项目 image.png

五、集成到jenkins

到Jenkins下载Sonar Qube插件,安装后重启Jenkins

image.png

image.png

image.png

六、再配置构建完成后的代码质量检测

image.png

image.png

这里添加生成令牌的 image.png image.png

然后去配置流水线的配置 image.png

image.png

image.png

js
sonar.projectname=${JOB_NAME} sonar.projectKey=${JOB_NAME} sonar.sources=./ sonar.java.binaries=target

image.png

最后完成了整个流程的自动化构建和质量检测

image.png

本文作者:松轩(^U^)

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

Document