Circle CI因Firebase Admin SDK失败

时间:2018-09-20 06:02:26

标签: 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 = 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项目进行测试吗?

1 个答案:

答案 0 :(得分:2)

如果您需要初始化应用,则需要有效的Firebase证书实例。

如果您不希望将证书文件检入源代码管理中(我同意这是最好的主意),则可以改为在Firebase控制台中设置另一个应用程序,严格用于测试目的。

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

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

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

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