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

如何在Cloud Build中启动Firebase模拟器后执行npm test测试

问题根因
  • 单独步骤启动模拟器无效:Cloud Build 的每个步骤都运行在独立的隔离容器中,你单独配置一个步骤启动 Firebase 模拟器,该服务会在当前步骤结束后随容器一同销毁,后续的测试步骤根本无法访问到这个模拟器服务。
  • 后台运行符不生效:你将&直接放在了 firebase 命令的 args 参数中,这个符号会被识别为 firebase 命令的输入参数,而不是 shell 的后台运行指令,无法实现后台启动的效果,会导致当前步骤一直阻塞直到超时退出,所以你只能看到镜像拉取日志,看不到后续报错。
调整后的完整配置
steps:
- name: 'gcr.io/cloud-builders/gcloud'
  id: MOVE-DOTENV-APP-YAML
  entrypoint: bash
  args:
    - '-e'
    - '-c'
    - |
      cp functions/util/config_dev.js functions/util/config.js
      cp functions/.env_dev functions/.env
- name: node
  dir: 'functions'
  entrypoint: npm
  args: ['install']
- name: 'gcr.io/xxxx/firebase'
  dir: 'functions'
  entrypoint: bash
  args:
    - '-e'
    - '-c'
    - |
      # 后台启动模拟器
      firebase emulators:start --only functions,firestore &
      echo "Waiting for emulator to load..."
      # 等待模拟器就绪,注意替换为你自己的健康检查地址
      while [ $(curl http://localhost:5001/xxx/us-central1/api --silent | grep "Unauthorized" | wc -l) -eq 0 ]; do sleep 2; done
      # 导入测试数据
      node import-db.js
      # 执行测试
      npm test
注意事项
  • 确认你构建的gcr.io/xxxx/firebase自定义镜像中预装了curl工具,否则等待就绪的逻辑会执行失败
  • 请将脚本中的健康检查地址http://localhost:5001/xxx/us-central1/api替换为你自己实际的 Cloud Functions 模拟器可访问地址
  • 如果import-db.js依赖额外的 npm 包,确保在上一步的npm install中已经完成安装

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:36:03