背景
在工作为验证一个开源系统的效果,我喜欢使用 Docker 快速搭建系统集成,加上 docker compose 的编排就很不错,也能快速的理清系统的依赖关系,最近需要使用代码扫描,基于 docker
避坑指南
内存分配需求
在 Mac/Windows 中,需要在 Docker Desktop 中将 Docker 的可分配内存大于 2G,否则 SonarQube web 服务启动不了
Linux 文件描述符配置
缺少以下这个配置,在 linux 中 SonarQube 也会启动不了
sysctl -w vm.max_map_count=524288
sysctl -w fs.file-max=131072
ulimit -n 131072
ulimit -u 8192
Ref:hub.docker.com/_/sonarqube
多分支增量
Sonar Community 版本可以使用插件 sonarqube-with-community-branch-plugin 进行多分支增量扫描,可统计增量代码、增量覆盖率
使用插件镜像(快速验证推荐)
可食用 sonarqube-with-community-branch-plugin 的镜像,已经配置好相应的环境变量,只需再把 sonarqube-with-community-branch-plugin 的 jar 放到映射的 extensions 目录中即可
使用 SonarQube 官方镜像(需要集成其他插件推荐)
不使用插件镜像,要使用 sonarqube-community-branch-plugin 需要配置插件需要使用的环境变量,具体是在 docker-compose 中的 environment 中配置以下两个环境变量
# - SONAR_WEB_JAVAADDITIONALOPTS=-javaagent:./extensions/plugins/sonarqube-community-branch-plugin-x.xx.x.jar=web
# - SONAR_CE_JAVAADDITIONALOPTS=-javaagent:./extensions/plugins/sonarqube-community-branch-plugin-x.xx.x.jar=ce
这里从 GitHub 下载插件时,我在使用时发现总是会报错,找不到 Pre Main class,需要重新编译, 这里还未尝试,除此之外,该插件需要注意版本兼容,在插件的 Github 中有注明对应的版本兼容性,祝大家不会踩坑
其他坑
注意版本兼容问题
实操
Volume 最佳实践
由于在本机器中使用了 docker compose 搭建了许多服务,因此为了保证各服务不串数据,我都会在对应的目录下存储对应的服务数据,如下推荐
.
├── README.md
├── config
│ └── sonar.properties
├── data
│ ├── postgre
│ │ └── data
│ └── sonar
│ ├── bundled-plugins
│ ├── data
│ ├── extensions
│ └── lib
└── docker-compose.yml
配置文件
docker-compose.yml
version: "3"
services:
sonarqube:
# image: sonarqube:8.3.1-community
image: mc1arke/sonarqube-with-community-branch-plugin:8.9-community
container_name: sonarqube
restart: 'no'
networks:
- sonarnet
environment:
- sonar.jdbc.username=sonar
- sonar.jdbc.password=sonar
- sonar.jdbc.url=jdbc:postgresql://sonarqube-postgre:5432/sonarqube
- sonar.search.javaOpts=-Xms256m -Xmx256m
ports:
- "9010:9000"
- "9011:9092"
depends_on:
- sonarqube-postgre
links:
- sonarqube-postgre
volumes:
- /Users/willijk/docker/sonarqube/data/sonar/data:/opt/sonarqube/data
- /Users/willijk/docker/sonarqube/data/sonar/extensions:/opt/sonarqube/extensions
- /Users/willijk/docker/sonarqube/data/sonar/bundled-plugins:/opt/sonarqube/lib/bundled-plugins
sonarqube-postgre:
image: postgres:12.3
container_name: sonarqube-postgre
restart: 'no'
ports:
- "5432:5432"
networks:
- sonarnet
environment:
- POSTGRES_USER=sonar
- POSTGRES_PASSWORD=sonar
- POSTGRES_DB=sonarqube
volumes:
- /Users/willijk/docker/sonarqube/data/postgre:/var/lib/postgresql
- /Users/willijk/docker/sonarqube/data/postgre/data:/var/lib/postgresql/data
networks:
sonarnet:
driver: bridge
效果
访问 ip:9010