首页 > 解决方案 > Firebase Functions 部署需要在 GCP 中进行键盘输入

问题描述

最近,当尝试部署我的 Firebase 函数时,我收到以下错误:

...
functions[verify(us-central1)]: Deployment error.
Build failed: Build error details not available. Please check the logs at
...

GCP 日志:

标签.build_step 资源类型 严重性 文本有效载荷
主要的 建造 信息 错误:获取存储源时出错:通用::未知:重试预算用尽(3 次尝试):获取 gcs 源:从 gcs 解包源:源提取容器以非零状态退出:1
主要的 建造 信息 错误
gsutil:标准输出 建造 信息 存档:/tmp/source-archive.zip
gsutil:STDERR 建造 信息 (EOF 或读取错误,视为“[N]one”...)
gsutil:STDERR 建造 信息 替换 /workspace/.runtimeconfig.json?[y]es, [n]o, [A]ll, [N]one, [r]ename: NULL
gsutil:STDERR 建造 信息 操作完成超过 1 个对象/89.4 KiB。
gsutil:STDERR 建造 信息 /[0 个文件][0.0 B/89.4 KiB]/[1 个文件][89.4 KiB/89.4 KiB]
gsutil:STDERR 建造 信息 复制 gs://gcf-sources-972818261280-us-central1/verify-d55557e5-9fcf-4a3d-b144-17690c85f5a1/version-182/function-source.zip#1611906282665422...
主要的 建造 信息 获取存储对象:gs://gcf-sources-972818261280-us-central1/verify-d55557e5-9fcf-4a3d-b144-17690c85f5a1/version-182/function-source.zip#1611906282665422
gsutil:STDERR 建造 信息 (EOF 或读取错误,视为“[N]one”...)
gsutil:STDERR 建造 信息 替换 /workspace/.runtimeconfig.json?[y]es, [n]o, [A]ll, [N]one, [r]ename: NULL
gsutil:标准输出 建造 信息 存档:/tmp/source-archive.zip
gsutil:STDERR 建造 信息 操作完成超过 1 个对象/89.4 KiB。
gsutil:STDERR 建造 信息 /[0 个文件][0.0 B/89.4 KiB]/[1 个文件][89.4 KiB/89.4 KiB]
gsutil:STDERR 建造 信息 复制 gs://gcf-sources-972818261280-us-central1/verify-d55557e5-9fcf-4a3d-b144-17690c85f5a1/version-182/function-source.zip#1611906282665422...
主要的 建造 信息 获取存储对象:gs://gcf-sources-972818261280-us-central1/verify-d55557e5-9fcf-4a3d-b144-17690c85f5a1/version-182/function-source.zip#1611906282665422
gsutil:STDERR 建造 信息 坏 CRC 4992186c(应该是 00000000)
gsutil:标准输出 建造 信息 膨胀:/workspace/tslint.json
gsutil:标准输出 建造 信息 膨胀:/workspace/tsconfig.json
gsutil:标准输出 建造 信息 膨胀:/workspace/src/index.ts
gsutil:标准输出 建造 信息 膨胀:/workspace/src/booking.mjml
gsutil:标准输出 建造 信息 膨胀:/workspace/src/booking.html
gsutil:标准输出 建造 信息 膨胀:/workspace/package.json
gsutil:标准输出 建造 信息 膨胀:/workspace/package-lock.json
gsutil:标准输出 建造 信息 膨胀:/workspace/lib/index.js.map
gsutil:标准输出 建造 信息 膨胀:/workspace/lib/index.js
gsutil:标准输出 建造 信息 膨胀:/workspace/.runtimeconfig.json 膨胀:/workspace/.gitignore
gsutil:标准输出 建造 信息 存档:/tmp/source-archive.zip
gsutil:STDERR 建造 信息 操作完成超过 1 个对象/89.4 KiB。
gsutil:STDERR 建造 信息 /[0 个文件][0.0 B/89.4 KiB]/[1 个文件][89.4 KiB/89.4 KiB]
gsutil:STDERR 建造 信息 复制 gs://gcf-sources-972818261280-us-central1/verify-d55557e5-9fcf-4a3d-b144-17690c85f5a1/version-182/function-source.zip#1611906282665422...
主要的 建造 信息 获取存储对象:gs://gcf-sources-972818261280-us-central1/verify-d55557e5-9fcf-4a3d-b144-17690c85f5a1/version-182/function-source.zip#1611906282665422
主要的 建造 信息 获取源
主要的 建造 信息 开始构建“f8f97fdd-29ff-4964-a080-26ba4bdd5705”

显然它需要我按下一个键来替换/workspace/.runtimeconfig.json,这显然是我做不到的。还有一个 CRC 不匹配。

我已通过 Cloud Functions 选项卡删除了函数并重新安装了所有节点模块,但错误仍然存​​在。

标签: firebasegoogle-cloud-platformgoogle-cloud-functions

解决方案


<TL/DR> 从节点 15 降级到节点 14 或节点 12 可以解决问题。

我的环境:

我正在运行带有 M1 ARM 芯片的 MacBook Air。我不知道它是否相关,但它可能是。

已知有效的版本组合:

目前使用 firebase-tools 9.2.2 运行 v14.15.4 x64。这种组合似乎没有故障。

在确定之前,我尝试了 v12.20.1 x64 和 firebase-tools 9.2.2,效果也很好。

我尝试过但失败的版本组合:

我已经使用 firebase-tools 9.2.2、9.2.1、9.2.0、9.1.2 和 8.20.0 尝试了 arm64 和 x64 的节点 v15.6.0,但没有成功。

还尝试了 node v15.7.0 arm64 和 firebase-tools 9.2.2,但没有成功。

让那些在 M1 Mac 上

如果您像我一样使用 M1 Mac,您可能已经知道 v14 无法在 M1 中编译。对于非 v15.5 或更高版本的任何内容,您都需要使用 x64 版本。

有许多指南和官方 NodeJS下载,用于 x64 版本,可以在 Rosetta 2 上正常运行(不要尝试 ARM 版本,这些仅适用于 Linux,不适用于您的 Mac)。

如果您使用nvm来管理您的版本并希望同时安装 x64 和 arm64 版本,我就是这样做的:

让 x64 和 arm64 版本共存:

nvm install将添加一个节点版本。如果你对你的机器没有做任何特别的事情,那么nvm install 15应该为你工作。目前还没有 M1 的预编译二进制文件,所以准备等待几分钟(超过 10 分钟)。

要设置 Node 14,只需打开一个新的终端窗口并输入arch -x86_64 zsh,这将在 x64 模式下启动一个新的 zsh 进程。在同一终端类型nvm install 14上。这应该比 v15 快得多,并且根据您的互联网速度,只需几秒钟即可返回。你都准备好了。关闭此终端选项卡并忘记它曾经存在过。

现在 runningnvm use 15将设置 node 运行 v15 arm64 版本, runningnvm use 14将运行 v14 x64 版本。

要检查您可以运行的节点版本node --version并检查您可以运行的架构node -p "process.arch"


推荐阅读