AWS EC2上通过Jenkins运行Cypress测试出现504网关超时问题排查
问题诊断与解决方案
一、同一主机(主机A)Cypress无法运行的原因
端口监听地址限制
被测应用可能仅绑定127.0.0.1而非0.0.0.0,导致Cypress通过主机名/公网IP请求时无法连接。虽curl用127.0.0.1能访问,但Cypress默认可能用外部地址发起请求。- 检查应用监听地址:
netstat -tulpn | grep <应用端口>,确认是否为0.0.0.0 - 修改应用配置,使其监听所有网卡地址
- 检查应用监听地址:
安全模块拦截
AWS EC2默认开启的SELinux(如Amazon Linux 2)可能限制Cypress的网络访问权限。- 临时关闭SELinux测试:
sudo setenforce 0,再执行cypress run - 若生效,添加SELinux规则允许Cypress访问本地应用,或调整永久策略
- 临时关闭SELinux测试:
无头模式依赖缺失
Cypress无头运行需要X11相关库,主机A若缺少这些依赖会导致初始化失败。- Amazon Linux 2安装依赖:
sudo yum install -y libX11 libXcomposite libXcursor libXdamage libXext libXi libXtst cups-libs libXScrnSaver libXrandr alsa-lib atk at-spi2-atk gtk3 - Debian/Ubuntu安装依赖:
sudo apt-get install -y libx11-xcb1 libxcb-dri3-0 libxcb-keysyms1 libxcb-randr0 libxcb-shape0 libxcb-xinerama0 libxss1 libdbus-1-3 libgtk-3-0 libgbm1
- Amazon Linux 2安装依赖:
二、Jenkins无法运行Cypress的通用原因(场景1、2)
Jenkins用户网络权限不足
Jenkins默认以jenkins用户运行,该用户可能无网络访问权限或无法解析被测应用主机名。- 切换到jenkins用户测试:
sudo su - jenkins -s /bin/bash,执行curl <被测应用URL>和cypress run --config baseUrl=<被测应用URL> - 若curl失败,检查
jenkins用户的hosts配置,或是否有防火墙规则限制该用户网络
- 切换到jenkins用户测试:
安全组/网络ACL出站限制
即使主机本身能访问,Jenkins进程的出站请求可能被安全组/ACL拦截。- 检查主机安全组出站规则:确保允许访问被测应用的端口(如80/443)
- 检查网络ACL:入站和出站均需允许两台主机间的端口流量
Cypress超时配置过短
AWS EC2网络延迟高于本地机房,默认超时时间不足以完成请求。
修改cypress.config.js增加超时参数:module.exports = { defaultCommandTimeout: 10000, pageLoadTimeout: 60000, requestTimeout: 10000 }Jenkins工作目录权限问题
Cypress需在工作目录生成临时文件,若权限不足会导致初始化失败,间接引发超时。- 检查权限:
ls -ld /var/lib/jenkins/workspace/<项目名> - 修复权限:
sudo chown -R jenkins:jenkins /var/lib/jenkins/workspace/<项目名>
- 检查权限:
三、额外排查步骤
- 启用Cypress详细日志:
cypress run --verbose,查看具体网络请求错误 - 抓包分析:用
tcpdump捕获Cypress的网络数据包,确认请求是否发送、是否收到响应 - 核对Jenkins环境变量:确保运行Cypress时的
NODE_ENV、BASE_URL等变量与命令行测试一致
内容的提问来源于stack exchange,提问作者Syed Ali
相关产品推荐
相关产品推荐

