Docker搭建Sonarqube进行代码扫描

Posted shuhe-nd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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.).

 

以上是关于Docker搭建Sonarqube进行代码扫描的主要内容,如果未能解决你的问题,请参考以下文章

安全测试-代码质量扫描 SonarQube

如何在构建docker镜像时执行SonarQube扫描.NET Core应用

白盒测试之静态代码扫描:SonarQube+Scanner环境搭建及使用

白盒测试之静态代码扫描:SonarQube+Scanner环境搭建及使用

Docker 搭建代码质量检测平台 SonarQube

Docker 容器中的 TypeScript SonarQube 扫描