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

npm install/ci报ERR! cb() never called!导致云构建失败如何解决?

云构建周期性npm安装失败问题分析

报错信息

docker.io/library/node:14 npm ERR! cb() never called!
npm ERR! This is an error with npm itself. Please report this error at: npm ERR! https://npm.community

当前构建配置

steps:
  - name: 'gcr.io/cloud-builders/git'
    id: 'fetch'
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        # convert the shallow clone to regular one
        git fetch --unshallow --no-tags
    waitFor: ['-']

  - name: 'node:14'
    id: 'npm-install'
    entrypoint: 'bash'
    args:
      - '-c'
      - |
        npm ci --unsafe-perm
    env:
      - 'CYPRESS_INSTALL_BINARY=0'
      - 'CYPRESS_CACHE_FOLDER=/cypress_cache'
    waitFor: ['fetch']

补充说明:所有依赖包均从npm官方源安装

排查思路

  • 验证npm版本兼容性:node14内置的npm v6版本存在多个已知的并发安装竞态bug,该类bug会偶发触发cb() never called!报错,周期性出现符合这类bug的特征
  • 检查构建节点资源配置:若云构建节点的CPU、内存配额不足,npm安装依赖时的并发处理容易出现进程挂起、超时,触发该报错
  • 确认依赖锁文件合法性:npm ci严格依赖package-lock.json的完整性,若锁文件存在手动修改、与package.json依赖声明不匹配、或由其他版本npm生成的情况,会偶发触发安装逻辑异常
  • 排查公网链路稳定性:即使使用官方npm源,云构建公网出口的网络抖动、丢包会导致部分依赖包下载超时,npm v6对这类异常的容错处理不完善,容易触发回调未执行的报错
  • 检查缓存配置:当前配置未对npm全局缓存做持久化,每次构建全量下载依赖,出现下载异常的概率大幅提升

解决方案

  • 升级npm到稳定修复版本:在执行npm ci前先升级npm到v6系列的最终修复版,规避已知bug,调整npm-install步骤的脚本为:
npm install -g npm@6.14.18 && npm ci --unsafe-perm
  • 限制npm安装并发数:通过--maxsockets参数降低npm的并发请求数,避免高并发触发竞态问题,命令调整为:
npm ci --unsafe-perm --maxsockets 10
  • 增加安装重试逻辑:在脚本中加入失败自动重试逻辑,抵消偶发网络波动的影响,示例脚本如下:
for attempt in {1..3}; do
  npm ci --unsafe-perm && break
done
  • 配置npm缓存持久化:将npm全局缓存目录挂载到云构建的持久化缓存卷,减少每次构建的依赖下载量,降低网络异常概率
  • 替换依赖安装工具:条件允许的前提下,可将npm ci替换为兼容性更稳定的yarn install --frozen-lockfile,规避npm本身的已知bug

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:45:04