SonarQube是一个自动化的源代码分析和审查平台。它可以帮助软件开发人员管理和提高软件质量,并减少技术债务。
功能特性
以下是SonarQube平台的主要功能:
静态代码分析:通过使用各种静态分析工具(如PMD,FindBugs,Checkstyle等),SonarQube能够检测代码中的各种问题,例如潜在的bug、安全漏洞、代码重复、代码格式问题等。
可视化报告:SonarQube生成可视化报告,让开发人员可以快速地了解他们的代码中存在哪些问题,并通过图表和统计数据来比较代码质量。
追踪问题:SonarQube可以跟踪代码的历史记录,并为每个问题提供详细信息和修复建议。
持续集成:SonarQube与多个流行的持续集成工具(如Jenkins和Travis CI)集成,使得开发人员可以将代码作为构建过程一部分进行自动化分析和检测。
安装和配置
Sonarqube Postgresql
- 拉取 postgresql 镜像
$ docker pull postgres:13
- 拉取 sonarqube 镜
$ docker pull sonarqube:8.9.10-community
- 创建工作目录
$ mkdir -p /usr/local/docker/soanrqube
- 编写docker-compose.yml文件
version: '3.9'
services:
db:
image: postgres:13
container_name: db
ports:
- 5432:5432
networks:
- sonarnet
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
sonarqube:
image: sonarqube:8.9.10-community
container_name: sonarqube
depends_on:
- db
ports:
- 9000:9000
networks:
- sonarnet
environment:
SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonarqube
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar
networks:
sonarnet:
driver: bridge
- 运行 sonarqube
$ docker compose up -d
# 查看运行日志
$ docker logs -f sonarqube
注意: 如果启动由于内存设置过小导致失败异常
# 修改配置文件
$ vim /etc/sysctl.conf
# 追加内存配置
vm.max_map_count=262144
# 使配置生效
$ sysctl -p
# 重新启动
$ docker compose up -d
- 登录sonarqube平台
账户默认:admin/admin
Sonar-Scanner
- 下载地址
- 解压安装
# 解压
$ unzip sonar-scanner-cli-4.8.0.2856-linux.zip
# 重命名
$ mv sonar-scanner-4.8.0.2856-linux/ sonar-scanner
# 移动至Jenkins挂载的数据卷目录
$ cd /usr/local/docker/jenkins/jenkins-data
$ mv /tmp/sonar-scanner ./
# 修改sonar-scanner 的配置文件
$ cd soner-scanner/conf
$ vim sonar-scanner.properties
#----- Default SonarQube server
sonar.host.url=http://192.168.88.151:9000
#----- Default source code encoding
sonar.sourceEncoding=UTF-8
- 使用sonar-scanner扫描项目代码
$ sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=test_demo2 -Dsonar.login=projectToken -Dsnar.projectKey=test_demo2 -Dsonar.java.binaries=./target/classes
参数命令:
-Dsonar.projectKey=my-project-key # 项目唯一key
-Dsonar.projectName # 指定扫描的项目名称
-Dsonar.sources=. # 代码根目录
-Dsonar.host.url=http://localhost:9000 # 上传 sonarqube 服务地址
-Dsonar.login=myAuthenticationToken # sonarqube 服务 token
-Dsonar.java.binaries=./target/classes # 项目编译后的字节码文件路径
除此之外,还有一些其他的可选参数,例如-Dsonar.projectVersion
指定项目版本,-Dsonar.sources.exclusions
指定不需要分析的文件或目录,还有指定分支代码扫描需要下载插件才行。完整的Sonar-Scanner参数列表可以通过运行sonar-scanner -h
或查看其文档获得。
Jenkins 配置 Sonarqube
-
下载插件, 搜索 SonarQube Scanner for Jenkins 版本2.15
-
配置插件
系统管理-系统配置-sonarqube servers: 配置token或者账户信息
注意如果存在ssl异常,则需要将协议替换成http
系统管理-全局工具配置: /var/local/jenkins_home/sonar-scanner
Jenkins 任务配置
-
在maven构建包之后添加Execute SonarQube Scanner
sonar.projectName=${JOB_NAME}
sonar.projectKey=${JOB_NAME}
sonar.sources=./
sonar.java.binaries=target
-
执行任务并查看控制台输出
3.查看质量分析结果上传sonarqube平台
至此,CI部分从gitlab拉取项目代码,经过sonarqube质量检测就已经完成。后续会完成maven打包制作镜像->上传镜像至harbor仓库->目标服务器拉取镜像->通过 docker compose 运行容器项目->项目访问.