Docker搭建sonarQube
SonarQube 是一款用于代码质量管理的开源工具,它主要用于管理源代码的质量。 通过插件形式,可以支持众多计算机语言,比如 java, C#, go,C/C++, PL/SQL, Cobol, JavaScrip, Groovy 等。sonar可以通过PMD,CheckStyle,Findbugs等等代码规则检测工具来检测你的代码,帮助你发现代码的漏洞,Bug,异味等信息。
Sonar 不仅提供了对 IDE 的支持,可以在 Eclipse和 IntelliJ IDEA 这些工具里联机查看结果;同时 Sonar 还对大量的持续集成工具提供了接口支持,可以很方便地在持续集成中使用 Sonar。
# 一、搭建步骤
# 1)搭建sonarQube
方案一:postgres + sonarQube
# 拉取postgres数据库镜像
$ docker pull postgres:10
# 拉取sonarQube镜像。这里以7.9.1-community为例
$ docker pull sonarqube:7.9.1-community
# 启动postgres
$ docker run -d -p 10003:5432 -e POSTGRES_PASSWORD=1 --name postgres postgres:10
# 创建sonar数据库。这里通过进入docker容器中
$ docker exec -it postgres /bin/bash
# 进入postgres命令行
root@3910d724e457:/# psql -U postgres
# 查看已有数据库
postgres=# \l
# 创建sonar数据库
postgres=# CREATE DATABASE sonar;
# 推出postgres命令行
postgres=# \q
# 启动sonarQube
$ docker run -d -p 11005:9000 --link postgres:postgres -e "SONARQUBE_JDBC_URL=jdbc:postgresql://postgres:5432/sonar" -e "SONARQUBE_JDBC_USERNAME=postgres" -e "SONARQUBE_JDBC_PASSWORD=1" --name sonarqube sonarqube:7.9.1-community
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
方案二:mysql + sonarQube(不推荐)
# 拉取mysql数据库镜像(sonarqube:7.4 不支持 mysql:5.7 以上)
$ docker pull mysql:5.7
# 创建工作目录,为接下来的挂载自定义映射路径做准备
$ mkdir -p /usr/mysql/conf
$ mkdir -p /usr/mysql/logs
$ mkdir -p /usr/mysql/data
# 创建网络
$ docker network create sonarqube-tier
# 启动mysql
$ docker run --name mysql -d -p 3306:3306--net sonarqube-tier -v /usr/mysql/conf:/etc/my.cnf.d -v /usr/mysql/logs:/logs -v /usr/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--restart always \
--privileged=true \
--network-alias mysql \
mysql:5.7
# 创建sonar数据库。这里通过进入docker容器中
$ docker exec -it mysql /bin/bash
======= 操作步骤 =======
# 密码 123456
mysql -uroot -p
#所有网络都可访问
GRANT ALL ON *.* TO 'root'@'%';
#创建 sonarqube 数据库
create database sonar;
# 添加远程登录用户:sonar ,并授予权限。
CREATE USER 'sonar'@'%' IDENTIFIED WITH mysql_native_password BY 'sonar';
GRANT ALL PRIVILEGES ON *.* TO 'sonar'@'%';
# 刷新权限
flush privileges;
======= 操作结束 =======
# 拉取sonarqube:7.4-community镜像
$ docker pull sonarqube:7.4-community
# 创建工作目录
$ mkdir -p /data/sonarqube
# 修改系统参数
$ echo "vm.max_map_count=262144" > /etc/sysctl.conf
$ sysctl -p
# 运行一个test容器
$ docker run -d --name sonartest sonarqube:7.4-community
# 将容器内的重要文件复制到宿主机
$ docker cp sonartest:/opt/sonarqube/conf /data/sonarqube
$ docker cp sonartest:/opt/sonarqube/data /data/sonarqube
$ docker cp sonartest:/opt/sonarqube/logs /data/sonarqube
$ docker cp sonartest:/opt/sonarqube/extensions /data/sonarqube
# 然后删除此容器
$ docker rm sonartest
# 修改文件夹权限
$ chmod -R 777 /data/sonarqube/
# 启动sonarQube。这里postgres对应的IP为192.168.39.10
$ docker run -d --name sonar -p 9090:9000 \
-e ALLOW_EMPTY_PASSWORD=yes \
-e SONARQUBE_DATABASE_USER=sonar \
-e SONARQUBE_DATABASE_NAME=sonar \
-e SONARQUBE_DATABASE_PASSWORD=sonar \
-e SONARQUBE_JDBC_URL="jdbc:mysql://mysql:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false" \
--net sonarqube-tier \
--privileged=true \
-v /data/sonarqube/logs:/opt/sonarqube/logs \
-v /data/sonarqube/conf:/opt/sonarqube/conf \
-v /data/sonarqube/data:/opt/sonarqube/data \
-v /data/sonarqube/extensions:/opt/sonarqube/extensions\
sonarqube:7.4-community
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
官网上已经声明 sonarQube 7.9 版本以上不再支持 mysql 了,我们为了以后升级新版本不做数据库迁移,尽量使用 postgresql 。
# 2)访问sonarQube
在浏览器中输入:192.168.39.10:9000,访问sonarQube。(账户/密码:admin/admin)
# 二、项目中使用
# 1)在IDEA中使用
首先,安装插件 SonarLint。与上面搭建的sonarQube关联起来。
然后,在pom.xml文件中的build标签下的插件中添加jacoco插件
...
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.4</version>
<executions>
<execution>
<id>jacoco-initialize</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>jacoco-report</id>
<phase>package</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
接着,执行mvn test
,会在target目录下生成jacoco.exec文件,表明jacoco正确执行。
最后,执行sonar命令:mvn sonar:sonar -Dsonar.host.url=[yours sonarQube url] -Dsonar.login=[yours id]
上次更新: 2021/01/18, 09:01:00