升级Cypress 12后CentOS 7 Jenkins环境报Socket错误求助
解决Cypress 12.3.0在CentOS7 Jenkins上的CreatePlatformSocket错误
核心原因
Cypress 9+版本起使用的Electron内核(基于Chrome 100+分支)默认优先尝试IPv6网络套接字,但CentOS 7系统默认可能未启用IPv6,或是Jenkins容器/运行环境的网络配置禁用了IPv6,导致套接字创建失败。而旧版Cypress 8依赖的Electron内核版本较低,没有强制优先IPv6,因此可以正常运行。
具体解决办法
1. 强制Cypress使用IPv4
在执行Cypress测试命令前,添加环境变量强制Electron禁用IPv6:
export ELECTRON_EXTRA_LAUNCH_ARGS="--disable-ipv6" npx cypress run
也可以直接在Jenkins构建步骤中合并命令:
ELECTRON_EXTRA_LAUNCH_ARGS="--disable-ipv6" npx cypress run
2. 调整Cypress配置文件
在cypress.config.js中配置浏览器启动参数,强制禁用IPv6:
const { defineConfig } = require('cypress') module.exports = defineConfig({ e2e: { setupNodeEvents(on, config) { on('before:browser:launch', (browser = {}, launchOptions) => { if (browser.family === 'electron') { launchOptions.args.push('--disable-ipv6') return launchOptions } }) }, }, })
3. 启用系统/容器的IPv6支持
如果允许启用IPv6,可在CentOS7系统中开启支持:
- 编辑
/etc/sysctl.conf,添加或修改配置:net.ipv6.conf.all.disable_ipv6 = 0 net.ipv6.conf.default.disable_ipv6 = 0 - 执行命令使配置生效:
sysctl -p
若使用Docker运行cypress/base:16.13.0镜像,启动容器时添加参数启用IPv6:
docker run --sysctl net.ipv6.conf.all.disable_ipv6=0 cypress/base:16.13.0 ...
4. 补全系统依赖
确保CentOS7系统安装了Cypress 12所需的底层依赖(cypress/base镜像已包含,但Jenkins宿主机可能缺失):
yum install -y libX11 libXcomposite libXcursor libXdamage libXext libXi libXtst cups-libs libXScrnSaver libXrandr alsa-lib pango atk at-spi2-atk gtk3
验证步骤
- 在Jenkins构建前执行
echo $ELECTRON_EXTRA_LAUNCH_ARGS,确认环境变量已正确设置 - 运行Cypress测试,观察错误是否消失
- 若问题仍存在,检查Jenkins的网络策略是否限制了套接字创建权限或IPv6访问
内容的提问来源于stack exchange,提问作者Rama
相关产品推荐
相关产品推荐

