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

Firebase 将不同的service-account-credentials.json文件部署到不同的云功能,firebase,google-cloud-platform,google-cloud-functions,service-accounts,firebase-cli,Firebase,Google Cloud Platform,Google Cloud Functions,Service Accounts,Firebase Cli,致力于创建两个独立的Firebase项目,一个作为开发环境,另一个作为我们的生产环境,以便在测试新功能时模拟真实情况 每当我需要将云功能部署到任何一个项目时,我都会执行以下操作: 将正确的服务帐户凭据复制并粘贴到service-account-credentials.json文件中 选择相应项目的别名dev或prod firebase使用开发或firebase使用产品 将云功能部署到各自的项目中 firebase仅部署功能 我觉得这样做既幼稚又乏味。有没有更好的方法可以做到这一点,在我的func

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

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

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

选择相应项目的别名dev或prod

firebase使用开发或firebase使用产品

将云功能部署到各自的项目中 firebase仅部署功能

我觉得这样做既幼稚又乏味。有没有更好的方法可以做到这一点,在我的functions目录中有一个service-account-credentials-prod.json和一个service-account-credentials-dev.json文件,然后根据我使用的项目别名,它将知道要部署的服务帐户凭据


如果有人能给我指出正确的方向,我将不胜感激。我还有两个项目,开发和生产

在/functions中,我有两个文件:

/函数/production-cred.json和

/函数/development-cred.json

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

firebase部署-仅限功能-p开发或

firebase仅部署功能-p生产

在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设置别名。我以前的做法与您相同,这一改进使部署更快、更可靠。

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

在/functions中,我有两个文件:

/函数/production-cred.json和

/函数/development-cred.json

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

firebase部署-仅限功能-p开发或

firebase仅部署功能-p生产

在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设置别名。我以前的做法与您相同,这一改进使部署更快、更可靠。

您真的需要使用功能部署服务帐户吗?AdminSDK和其他Google SDK可以使用项目的默认服务帐户初始化,如果您没有指定一个帐户,那么它应该能够完成您需要的所有操作。这是做事情的首选方法。您真的需要使用您的功能部署服务帐户吗?AdminSDK和其他Google SDK可以使用项目的默认服务帐户初始化,如果您没有指定一个帐户,那么它应该能够完成您需要的所有操作。这是做事情的首选方式。谢谢,这很有效。因为这样做,所以在两个云功能部署中都有服务凭据文件?是的。可能不太理想,如果您真的只需要将它们上载到各自的环境中,您可以使用一个脚本,该脚本将要部署的环境作为输入,并执行必要的工作以防止其中一个被部署。如果我的回答对您有所帮助,请将其标记为已接受。在这种情况下,有没有方法使用导入对账单导入服务帐户文件?谢谢,这很有效。因为这样做,所以在两个云功能部署中都有服务凭据文件?是的。可能不太理想,如果您真的只需要将它们上载到各自的环境中,您可以使用一个脚本,该脚本将要部署的环境作为输入,并执行必要的工作以防止其中一个被部署。如果我的回答对您有帮助,请将其标记为已接受。在这种情况下,是否有方法使用导入语句导入服务帐户文件?