Docker搭建Sonarqube进行代码扫描

一、背景

为了保证外包项目的质量,我们需要搭建一个代码扫描的工具,减少人工review的工作量。

依旧是内网环境,只能通过外网docker镜像的方式把整个环境迁移到内网服务器上。

二、方法

由于新版的sonar不再支持mysql,所以我们需要使用postgresql作为替代。

因此需要使用如下两个镜像:

docker run -d --name pgdb -e POSTGRES_USER=sonar  -e POSTGRES_PASSWORD=sonar -v /data/pgdata:/var/lib/postgresql/data-d docker.io/postgres:latest
docker run --name sq --link pgdb -e SONARQUBE_JDBC_URL=jdbc:postgresql://pgdb:5432/sonar \
-p 9000:9000 \
-v /data/sonarqube/data:/opt/sonarqube/data \
-v /data/sonarqube/extensions:/opt/sonarqube/extensions -d sonarqube

但是在启动sonarqube时失败了,容器自动退出。

三、问题排查

经过网上搜索,发现有两个地方比较可疑:

1、宿主机的最大用户可用内存小于镜像需求:原因是sonar 使用了elastic search服务,后者要求可用内存上限是:262144

具体内容可见官方docker上维护sonar镜像说明 截图如下所示:

为了使设定永久生效,我们通过如下命令,参考了

https://www.cnblogs.com/lyrb/p/11951018.html

报错信息如下
  max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

临时解决办法(重启虚拟机会失效):
1.切换到root用户,执行命令:

  sysctl -w vm.max_map_count=262144

2.查看结果:

  sysctl -a|grep vm.max_map_count

3.显示:

  vm.max_map_count = 262144

永久解决办法
  在/etc/sysctl.conf文件最后添加一行:vm.max_map_count=262144

  重启虚拟机

 2、查看容器启动后的日志,定位具体问题所在

发现log中提示是数据库连不上,因此需要解决数据库的问题:

2020-06-19T03:04:48.030007092Z Caused by: java.lang.IllegalStateException: Can not connect to database. 
Please check connectivity and settings (see the properties prefixed by 'sonar.jdbc.').

猜你喜欢

转载自www.cnblogs.com/shuhe-nd/p/13162051.html