作者:itbases | 来源:互联网 | 2023-09-09 17:02
我正在通过此GitHubAction部署FirebaseCloudFunction。当我使用服务帐户从我自己的机器部署时,它工作正常。使用相同的服务帐户运行操作时,我遇到了以下
我正在通过此 GitHub Action部署 Firebase Cloud Function 。当我使用服务帐户从我自己的机器部署时,它工作正常。使用相同的服务帐户运行操作时,我遇到了以下错误。
最终错误:
错误:错误获取存储源:通用::未知:重试预算用尽(3次尝试):获取gcs源:从gcs解包源:源提取容器以非零状态退出:9
之前的日志:
未找到中央目录结尾签名。该文件不是一个 zipfile,或者它构成了一个多部分存档的磁盘。在后一种情况下,将在此存档的最后一个磁盘上找到中央目录和 zipfile 注释。解压缩:在 /tmp/source-archive.zip 或 /tmp/source-archive.zip.zip 之一中找不到 zipfile 目录,并且找不到 /tmp/source-archive.zip.ZIP,句号。
这是我的操作 yml:
name: Deploy
on:
pull_request:
branches:
- master
jobs:
integration-test:
name: Run tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: checkout repo and set up Node.js v12.x
uses: actions/setup-node@v1
with:
node-version: 12.x
- name: Install dependencies
run: cd ./functions/ && npm install
- id: deploy
name: Deploy my_function to Cloud Functions
uses: google-github-actions/deploy-cloud-functions@v0.1.2
with:
name: my_function
runtime: nodejs12
credentials: ${{ secrets.GCP_ACCOUNT_JSON }}
source_dir: ./functions/
- id: echo_url
name: Echo deployed Cloud Function URL
run: echo ${{ steps.deploy.outputs.url }}
该函数本身不需要 GCS 访问权限,但服务帐户是一个编辑器,因此无论如何它都有。我想这个问题更多地与将 GitHub 源代码上传到 GCS 然后从那里获取以进行部署的方式有关?任何提示?
回答
如果有人使用 Cloud Build 进行部署并遇到此问题,这里有一个潜在的原因和解决方案。
原因
我正在按照Firebase的官方 Cloud Build 文档中的步骤操作,但一直收到此错误。对于说使用 Node 12 的类似问题,有多个答案,但这实际上并没有帮助,因为我使用的是提供的图像。
我终于想到,实际上是谷歌提供的构建步骤图像具有不兼容的Node版本。我查看了用于构建映像的 Docker 文件,它没有指定 Node.js 的哪个版本。当我在 Cloud Build 上检查图像中使用的 Node 版本时,它是 Node 15。我怀疑这就是导致问题的原因。
解决方案
为了创建一个可以在 Cloud Build 上使用 Node 12 部署 Firebase 函数的镜像,我按照文档中的步骤克隆了社区构建器镜像:
git clone https://github.com/GoogleCloudPlatform/cloud-builders-community.git
cd cloud-builders-community/firebase
但是在我将构建提交到我的项目之前,我Dockerfile
在 repo 中进行了更改以专门使用 Node 12:
FROM node:12
FROM node:12
按照其余步骤提交图像。一旦我这样做了,我就能够在 Cloud Build 上部署 Firebase 函数!
作为参考,这就是我的cloudbuild.yaml
样子: