将不同的service-account-credentials.json文件部署到不同的云功能

时间:2019-02-07 10:24:10

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

致力于创建两个单独的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文件,然后根据我使用的项目别名,它会知道要部署哪个服务帐户凭据?

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

1 个答案:

答案 0 :(得分:2)

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

/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设置别名。我曾经以与您相同的方式进行此操作,并且这种改进使部署更快,更可靠。