Circle CI Firebase Admin SDK 失败
Circle CI failing with Firebase Admin SDK
我有一个使用 Firebase Admin SDK 的 Express API。
目前,我的应用程序失败 CI 因为它无法在测试阶段初始化,因为无法连接到 Firebase。
我的项目根目录中有一个 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 构建运行时,测试失败 Error: Cannot find module '../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}
这会在项目的根目录中生成用于测试目的所需的文件。
我有一个使用 Firebase Admin SDK 的 Express API。
目前,我的应用程序失败 CI 因为它无法在测试阶段初始化,因为无法连接到 Firebase。
我的项目根目录中有一个 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 构建运行时,测试失败 Error: Cannot find module '../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}
这会在项目的根目录中生成用于测试目的所需的文件。