Cypress在CircleCI运行报SIGSEGV错误本地运行正常该如何解决?
问题原因
- dbus服务缺失:CircleCI容器默认未配置dbus服务,Cypress依赖的Chromium内核尝试访问
/var/run/dbus/system_bus_socket套接字失败,对应你日志中开头的bus.cc(392)相关报错,该警告本身不会直接导致崩溃,但会和后续渲染异常叠加触发进程退出。 - GPU渲染兼容缺陷:日志中的
gpu_init.cc(441)] Passthrough is not supported, GL is swiftshader说明容器环境无物理GPU,Chromium启用硬件加速失败切换到软件渲染,你使用的Cypress 8.6.0版本对Debian 10无GPU环境的软件渲染适配存在已知bug,会触发SIGSEGV段错误,直接导致测试进程意外退出。 - 资源不足:CircleCI默认小型执行节点内存通常为2GB,Cypress运行多测试用例场景下内存占用会持续升高,内存溢出也会触发段错误退出。
修复方案
- 禁用GPU相关功能:启动Cypress时添加禁用硬件加速参数,命令为
cypress run --headless --env ELECTRON_DISABLE_GPU=1 --config numTestsKeptInMemory=0,也可以在cypress配置文件中添加全局规则:
// cypress.json(v8版本配置文件) { "numTestsKeptInMemory": 0, "env": { "ELECTRON_DISABLE_GPU": "1" } }
- 补充dbus依赖:在CircleCI的config.yml中添加dbus安装启动步骤,解决开头的套接字报错:
steps: - run: name: 安装启动dbus服务 command: | apt update && apt install -y dbus service dbus start
- 调整执行节点配置:将CircleCI执行节点的资源类调整为4GB及以上内存规格,避免测试运行过程中内存溢出。
- 版本升级:条件允许的话将Cypress升级到10.0及以上版本,该版本已经修复了无GPU Linux环境下的软件渲染崩溃问题。
内容的提问来源于stack exchange,提问作者Abdullah Sohail Yaqoob
相关产品推荐
相关产品推荐

