You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Jenkins运行Cypress前启动React应用触发ENOSPC监听错误如何解决

问题原因

你遇到的ENOSPC报错是Linux系统默认的inotify文件监听数量上限不足导致的。react-scripts start默认开启开发模式的热重载功能,会调用chokidar监听项目所有相关文件(包括node_modules下的依赖文件),当监听数量超过系统默认上限时就会抛出该错误。

优先推荐解决方案(适配CI场景,无系统修改依赖)

CI环境不需要热重载、文件监听这类开发功能,你可以直接在启动命令前添加CI=true环境变量,react-scripts识别到CI环境后会自动关闭所有开发模式的监听特性,从根源避免触发监听上限:
修改package.json中的start:e2e-ci脚本如下:

"start:e2e-ci": "CI=true REACT_APP_TEST_ENV=e2e HTTPS=true HOST=pressboxlivelocal.statsperform.com PORT=443 react-scripts start"

该方案不需要修改Jenkins节点的系统配置,适配所有临时CI节点场景,优先使用

补充注意事项

你当前的Jenkins步骤直接执行npm run start:e2e-ci会占住前台进程,后续Cypress测试命令无法执行,需要调整脚本将React应用后台启动,等服务就绪后再运行测试,测试完成后销毁后台进程,参考修改后的Jenkinsfile步骤:

stage('Cypress') {      
  steps {        
    configFileProvider([configFile(fileId: 'shell-aliases', variable: 'CFG_SHELL_ALIASES')]) {  
      sh '''
      source $CFG_SHELL_ALIASES > /dev/null 2>&1
      # 后台启动React应用
      npm run start:e2e-ci &
      # 等待React服务启动完成,替换为你实际的服务地址
      npx wait-on https://pressboxlivelocal.statsperform.com
      # 运行Cypress测试,替换为你实际的Cypress运行命令
      npm run test:cypress
      # 测试完成后杀掉后台的React进程
      kill $!
      '''
    }    
  }
}    
备选解决方案(需要修改系统配置)

如果因为特殊需求不能关闭热重载功能,可以通过调大系统inotify监听上限解决:

  • 临时生效(重启节点后恢复默认):在Jenkins步骤的最开头添加命令 sudo sysctl fs.inotify.max_user_watches=524288,需要给Jenkins运行用户开放sudo执行sysctl的权限
  • 永久生效:登录Jenkins运行节点,在/etc/sysctl.conf文件末尾添加一行 fs.inotify.max_user_watches=524288,保存后执行 sudo sysctl -p 即可永久生效

内容的提问来源于stack exchange,提问作者Rafael Urbina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:24:04