Node.js Firebase工具:作为服务帐户登录

Node.js Firebase工具:作为服务帐户登录,node.js,firebase,google-cloud-functions,firebase-tools,Node.js,Firebase,Google Cloud Functions,Firebase Tools,我无法找到代表服务帐户部署firebase项目(功能)的方法 没有说什么,而且我也没有发现他们之间有任何关联 如前所述,我运行firebase login:ci命令,但随后我需要自己登录,并且我希望以服务帐户的身份登录 使用gcloud工具可以使用此功能,但是,如中所述 不能使用gcloud命令行工具部署使用Firebase SDK编写的云函数,反之亦然 这里是消防队 由于使用了Firebase CLI/tools,因此可以使用服务帐户进行身份验证 在这里也可以看到Michael的答案: 先前的

我无法找到代表服务帐户部署firebase项目(功能)的方法

没有说什么,而且我也没有发现他们之间有任何关联

如前所述,我运行
firebase login:ci
命令,但随后我需要自己登录,并且我希望以服务帐户的身份登录

使用
gcloud
工具可以使用此功能,但是,如中所述

不能使用gcloud命令行工具部署使用Firebase SDK编写的云函数,反之亦然

这里是消防队

由于使用了Firebase CLI/tools,因此可以使用服务帐户进行身份验证

在这里也可以看到Michael的答案:

先前的答复:

要使用Firebase CLI/tools,您需要以实际用户身份登录。无法将Firebase CLI作为服务帐户运行


不过,它被认为是一个有效且有趣的功能请求!一些可能有助于实现此功能的工作正在中完成。与往常一样:没有关于是否/何时/如何着陆的承诺。密切关注最新更新。

您可以实际使用有权访问Firebase角色的Google帐户(服务帐户或其他帐户)的刷新令牌,并将其设置为
Firebase\u令牌
环境变量

例如,我使用Cloud Build(它有一个已登录到
gcloud
的关联服务帐户),然后将
FIREBASE\u令牌设置为

gcloud auth应用程序默认打印访问令牌

此功能:

$> gcloud iam service-accounts keys create ./secrets.json --iam-account=<SERVICE_ACCOUNT_EMAIL>

$> export GOOGLE_APPLICATION_CREDENTIALS="./secrets.json"

$> firebase deploy --project <PROJECT_ID>
$>gcloud iam服务帐户密钥创建。/secrets.json--iam帐户=
$>导出GOOGLE_应用程序_凭据=“./secrets.json”
$>firebase部署--项目

由于文档明确指出这是不可能的,您的问题是什么?文档指出,不可能使用gcloud工具部署使用firebase SDK编写的云函数。它并没有说代表服务帐户使用firebase工具进行部署是不可能的。我希望会有办法,这将是一个有用的功能。我们希望我们的CI在成功构建后自动部署到firebase(托管和功能),而服务帐户似乎是这样做的明智方式。看起来这是合并的。似乎那里发生了一些事情。。。希望我们很快就可以使用GOOGLE_APPLICATION_CREDENTIALS方法:)我已经用一个服务帐户测试了新的Firebase CLI v7.1.0,它现在工作得很好:@Dapp是的,它工作起来不需要浏览器登录。从v7.1.0开始,我们可以使用Firebase CLI在CI/CD管道中部署Firestore和存储规则作为构建步骤,只需使用云构建的默认服务帐户(基本上就像我们在那里使用
gcloud
bq
gsutil
)。但同样的方法也适用于Gitlab、Bitbucket CI等具有自定义服务帐户凭据的应用程序。感谢您推荐的解决方案。基于此,我创建了一个专门的构建步骤,我只想与其他人分享:
-name:'gcr.io/cloud builders/gcloud'entrypoint:/bin/bash args:['-c','gcloud auth应用程序默认打印访问令牌>FIREBASE_令牌']
@thoutbeckers“服务帐户或其他”-如何获取服务帐户的刷新令牌?在我的情况下,服务帐户已经是设置的帐户,但在过去,我使用了
--impersonate service account=service\u account\e EMAIL
标志,带有
gcloud
。确保您自己帐户的角色足够高(它需要
iam.serviceCounts.getAccessToken
权限)。如果有效,你可以在这里告诉我,我会更新答案。