使用Firebase管理SDK循环CI失败

使用Firebase管理SDK循环CI失败,firebase,firebase-admin,Firebase,Firebase Admin,我有一个使用Firebase Admin SDK的Express API 目前,由于无法连接到Firebase,我的应用程序无法通过CI,因为它无法在测试阶段初始化 我在项目的根目录中有一个serviceAccountKey.json文件,我按如下方式导入该文件 import * as fbseAdmin from 'firebase-admin' const FIREBASE_DB_URI = process.env.FIREBASE_DB_URI const serviceAccount

我有一个使用Firebase Admin SDK的Express API

目前,由于无法连接到Firebase,我的应用程序无法通过CI,因为它无法在测试阶段初始化

我在项目的根目录中有一个
serviceAccountKey.json
文件,我按如下方式导入该文件

import * as fbseAdmin from 'firebase-admin'

const FIREBASE_DB_URI = process.env.FIREBASE_DB_URI
const serviceAccount = require('../serviceAccountKey.json')

fbseAdmin.initializeApp({
  credential: fbseAdmin.credential.cert(serviceAccount),
  databaseURL: FIREBASE_DB_URI
})

export default fbseAdmin
此文件包含敏感信息,因此被排除在源代码管理之外

我遇到的第一个问题是,当我的CI构建运行时,测试失败,因为
错误:找不到模块'../serviceAccountKey.json'

最好的方法是什么?我应该模拟文件吗?我不想让模拟文件在我的解决方案中浮动

其次,我相信如果Firebase没有正确初始化,应用程序将无法启动


我应该设置一个模拟Firebase项目进行测试吗

如果需要初始化应用程序,您将需要Firebase证书的有效实例

如果您不希望将证书文件签入源代码管理,我同意这是最好的主意,那么您可以在Firebase控制台中安装另一个应用程序,严格地用于测试目的

使用此应用程序,您可以对证书进行Base64编码,将其设置为构建中的环境变量

在CI容器中运行应用程序之前,只需将解码后的BASE64环境变量回显到文件名
myServiceKey.json
或类似文件中即可

steps:
  - checkout
  - run: echo $FIREBASE_SERVICE_KEY | base64 -di > ./${FIREBASE_SERVICE_ACCOUNT_CERT_NAME}

这将在项目的根目录中生成测试所需的文件。

这是迄今为止我发现的最简单的方法。谢谢