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进行代码扫描的主要内容,如果未能解决你的问题,请参考以下文章
如何在构建docker镜像时执行SonarQube扫描.NET Core应用
白盒测试之静态代码扫描:SonarQube+Scanner环境搭建及使用