持续集成:搭建SonarQube

SonarQube是一个开源的代码质量管理系统,可以将工程中代码问题,按预设的规则,输出代码质量报告。

本文记录在Mac上使用Docker Compose搭建SonarQube的过程,方便后来人。

在Mac上搭建SonarQube,以前一般是下载安装包安装的。除了SonarQube,还要手动安装数据库,因为开发机上依赖库不同版本等原因,通常是需要折腾好一阵的。

本文使用Docker,相当方便,无痛安装,值得拥有。

docker-compose.yml

Docker的基本知识请参考前文「Docker:基本知识」。

在指定目录下新建docker-compose.yml文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
version: "3"

services:
sonarqube:
image: sonarqube
ports:
- "9000:9000"
networks:
- sonarnet
environment:
- SONARQUBE_JDBC_URL=jdbc:postgresql://db:5432/sonar
- "ES_JAVA_OPTS=-Xms8g -Xmx8g"
- sonar.jdbc.username=sonar
- sonar.jdbc.password=sonar
volumes:
- '${LocalPath}/conf:/opt/sonarqube/conf'
- '${LocalPath}/data:/opt/sonarqube/data'
- '${LocalPath}/ext:/opt/sonarqube/extensions'
- '${LocalPath}/plugin:/opt/sonarqube/extensions/plugins'

db:
image: postgres
networks:
- sonarnet
environment:
- POSTGRES_USER=sonar
- POSTGRES_PASSWORD=sonar
volumes:
- '${LocalPath}/postgresql:/var/lib/postgresql'
- '${LocalPath}/postgresqldata:/var/lib/postgresql/data'

networks:
sonarnet:
driver: bridge

volumes:
sonarqube_conf:
sonarqube_data:
sonarqube_extensions:
sonarqube_bundled-plugins:
postgresql:
postgresql_data:

需要说明的是,配置sonarqube的容器,环境变量需要配置上postgres相关的参数。

同时在同级目录下新建.env文件:

1
LocalPath=/Users/ryan/DevEnv/SonarQube/volumes

Docker的宿主机要求

因为SonarQube内置了Elasticsearch,es对内存跟文件句柄有一定要求,如果不修改配置,启动容器的时候是可能会失败的。搜索了官网后,查到了相关处理方案:

1
2
3
4
5
6
7
* macOS with  Docker for Mac
The vm.max_map_count setting must be set within the xhyve virtual machine:
1. From the command line, run:
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
2. Press enter and use`sysctl` to configure vm.max_map_count:
sysctl -w vm.max_map_count=262144
3. To exit the screen session, type Ctrl a d.

启动服务

在docker-compose.yml目录下,执行docker-compose up即可。如果希望后台执行,加上-d参数。浏览器访问http://localhost:9000即可(端口号与yml配置一致)。

Done!

Author: Jason

Permalink: http://blog.knpc21.com/tech/ci-docker-sonarqube/

文章默认使用 CC BY-NC-SA 4.0 协议进行许可,使用时请注意遵守协议。

Comments