【问题标题】:Deploying different service-account-credentials.json file to different cloud functions将不同的 service-account-credentials.json 文件部署到不同的云功能
【发布时间】:2019-07-01 10:35:14
【问题描述】:

致力于创建两个独立的 Firebase 项目,一个作为开发环境,另一个作为我们的生产环境,以便在测试新功能时模拟真实事物。

每当我需要将云功能部署到任一项目时,我都会执行以下操作:

  1. 将正确的服务帐户凭据复制并粘贴到 service-account-credentials.json 文件中

  2. 选择相应项目的别名(dev 或 prod)

firebase use devfirebase use prod

  1. 将云功能部署到各自的项目

firebase deploy --only functions

我觉得这是一种幼稚而乏味的做法。有没有更好的方法可以在我的函数目录中有一个 service-account-credentials-prod.json 和一个 service-account-credentials-dev.json 文件,然后取决于我使用的项目别名,它会知道要部署哪个服务帐户凭据?

如果有人能指出我正确的方向,将不胜感激

【问题讨论】:

  • 您真的需要为您的功能部署一个服务帐户吗? Admin SDK 和其他 Google SDK 可以使用您项目的默认服务帐户进行初始化,如果您没有指定一个,那么它应该能够完成您需要的一切。这是做事的首选方式。

标签: firebase google-cloud-platform google-cloud-functions service-accounts firebase-cli


【解决方案1】:

我也有两个项目,开发和生产。

/functions 我有两个文件:

/functions/production-cred.json

/functions/development-cred.json

我使用相应的命令进行部署:

firebase deploy --only functions -P development

firebase deploy --only functions -P production.

index.js 中,我使用环境变量process.env.GCLOUD_PROJECT 来确定正在使用哪个环境。这个变量会包含你的项目名称,生产和开发应该是不同的,你不能打印出来检查。

这是一个示例:

const env = process.env.GCLOUD_PROJECT
const development = (env == "myDevProject")
const database = development ? devDbUrl : prodDbUrl
const serviceAccountFile = development ? "devCred.json" : "prodCred.json"
const serviceAccount = require(`./${serviceAccountFile}`)
admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: database
})

这样做不需要您使用firebase use dev|prod 设置别名。我以前的做法和你一样,这次改进使部署更快、更可靠。

【讨论】:

  • 谢谢,这行得通。因为你这样做,你在两个云功能部署中都有两个服务凭证文件?
  • 是的。可能并不理想,如果您真的只需要将它们上传到它们各自的环境,您可以有一个脚本,将环境作为要部署的输入,并执行必要的工作以防止其中一个被部署。如果我的回答对您有帮助,请将其标记为已接受。
  • 在这种情况下有没有办法使用导入语句导入服务帐户文件?
猜你喜欢
  • 2020-08-23
  • 1970-01-01
  • 1970-01-01
  • 2018-04-12
  • 1970-01-01
  • 1970-01-01
  • 2018-07-24
  • 1970-01-01
  • 2013-09-23
相关资源
最近更新 更多