AWS EC2 Ubuntu中GitLab Runner Docker执行Selenium时报ChromeDriver不存在错误
问题根因
你使用的是Docker类型的GitLab Runner,所有CI任务都会基于你配置的maven:latest镜像启动独立容器运行,容器与EC2宿主机的文件系统完全隔离,宿主机上安装的chromedriver、Chrome浏览器默认无法被容器内的程序访问,因此Java代码检测/usr/local/bin/chromedriver时返回不存在,触发报错。
可行解决方案
- 方案1:更换GitLab Runner执行器类型为shell,让CI任务直接在EC2宿主机上执行,可直接调用宿主机已安装的Chrome和chromedriver。只需重新注册Runner时指定executor为shell即可。
- 方案2:自定义CI运行镜像,基于官方maven镜像补充安装对应版本的Chrome和chromedriver,将构建好的自定义镜像替换gitlab-ci.yml中
image: maven:latest的配置即可。这种方式环境一致性最高,推荐使用。 - 方案3:修改GitLab Runner的
config.toml配置,新增volumes挂载规则,将宿主机的chromedriver路径/usr/local/bin/chromedriver、Chrome浏览器路径/usr/bin/google-chrome以及相关依赖库路径挂载到容器内。该方案容易出现依赖缺失问题,仅作为临时方案使用。
额外注意事项
无论采用哪种方案,容器内运行Selenium时都需要给Chrome添加无头模式启动参数,否则无图形环境会导致Chrome启动失败,示例配置如下:
ChromeOptions options = new ChromeOptions(); options.addArguments("--headless=new"); options.addArguments("--no-sandbox"); options.addArguments("--disable-dev-shm-usage");
内容的提问来源于stack exchange,提问作者Sandesh Sawant
相关产品推荐
相关产品推荐

