Jenkins流水线运行Cypress测试时Chrome DevTools协议重连失败求助
Jenkins流水线运行Cypress有头Chrome测试时DevTools连接失败的解决方案
问题重现
在Windows 10 Jenkins代理上执行Cypress有头Chrome测试时,流水线失败并抛出以下错误:
Start generate report process Read and merge jsons from "C:\jenkins\workspace\Shuttle-Online-UITests-Pipeline\cypress\reports\.jsons" There was an error reconnecting to the Chrome DevTools protocol. Please restart the browser. Error: connect ECONNREFUSED 127.0.0.1:55047 at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1494:16)
执行命令为:
npx cypress run --headed --spec "cypress/e2e/**/*.cy.ts" --env shuttle_webservice=https://xxxxxx/OnlineUITestsMaster.WebService/,version=5.7.0,think_time=1000,lang=en_US --reporter-options "configFile=cypress/config/reporter-chrome-config.js" --browser chrome
环境版本:Cypress 13.6.3、Node.js 18.15.0、Jenkins 2.452.1,已尝试重启浏览器和虚拟机,问题未解决。
解决方案
指定固定调试端口并禁用沙箱
Windows Jenkins代理运行有头Chrome时,沙箱机制或随机端口占用可能导致DevTools连接失败。修改执行命令,添加固定调试端口和沙箱禁用参数:npx cypress run --headed --spec "cypress/e2e/**/*.cy.ts" --env shuttle_webservice=https://xxxxxx/OnlineUITestsMaster.WebService/,version=5.7.0,think_time=1000,lang=en_US --reporter-options "configFile=cypress/config/reporter-chrome-config.js" --browser chrome --remote-debugging-port=9222 --no-sandbox固定端口可避免随机端口被占用,
--no-sandbox解决Jenkins服务权限不足无法启动沙箱的问题。切换Jenkins代理为交互式服务模式
Windows Jenkins代理默认以无桌面交互的服务模式运行,导致有头Chrome无法正常初始化DevTools连接:- 打开Windows服务管理器,找到Jenkins代理服务
- 右键进入「属性」-「登录」选项卡
- 选择「此账户」,输入具备桌面权限的本地/域账户及密码
- 勾选「允许服务与桌面交互」,重启Jenkins代理服务
增加Cypress浏览器启动超时
Windows虚拟机资源不足可能导致Chrome启动缓慢,Cypress超时无法连接DevTools。在cypress.config.ts中增加启动超时配置:import { defineConfig } from "cypress"; export default defineConfig({ e2e: { setupNodeEvents(on, config) { // 保留原有配置 }, // 增加浏览器启动超时至120秒 browserLaunchTimeout: 120000, defaultCommandTimeout: 10000, pageLoadTimeout: 60000 }, });排查端口占用
错误中的55047端口可能被其他进程占用,在Jenkins代理上执行以下命令排查:netstat -ano | findstr :55047若找到占用进程,结束进程后重试流水线;也可在命令中指定未被占用的固定端口(如9222)。
匹配Chrome与Cypress版本
Cypress 13.6.3要求Chrome版本≥114,检查代理上的Chrome版本,若过低则升级至最新稳定版后重试。
内容的提问来源于stack exchange,提问作者Dhafer
相关产品推荐
相关产品推荐

