使用 CircleCI 部署到 Firebase 托管

Posted

技术标签:

【中文标题】使用 CircleCI 部署到 Firebase 托管【英文标题】:Deploying to Firebase Hosting using CircleCI 【发布时间】:2015-04-18 15:11:59 【问题描述】:

我正在尝试弄清楚如何。据我所知,没有办法使用 SSH 密钥设置部署,所以我试图找到一种在部署期间登录 Firebase 并推送代码的方法。到目前为止,我在 circle.yml 中尝试过的内容如下:

// circle.yml
deployment:
  production:
    branch: circle-deploy
    commands:
      - npm install -g firebase-tools
      - firebase login | echo -e "$FIREBASE_EMAIL\n$FIREBASE_PASSWORD"
      - firebase deploy

但是,我不断收到以下错误,我不知道如何解决它。

stream.js:94
      throw er; // Unhandled stream error in pipe.
            ^
Error: write EPIPE
    at errnoException (net.js:904:11)
at Object.afterWrite (net.js:720:19)

【问题讨论】:

【参考方案1】:

我只需要这样做,还有一种更简单的方法

    在您的机器上,您可以通过键入获取访问令牌

    firebase login:ci
    
    将该令牌保存为 circleci 中的环境变量,$FIREBASE_TOKEN

    对于您的部署步骤,您可以跳过登录:

    deployment:
      production:
        branch: master
        commands:
          - firebase deploy --token=$FIREBASE_TOKEN --non-interactive
    

【讨论】:

不知道login:ci 是一个东西。感谢您指出这一点!【参考方案2】:

对上述其他答案的一个小补充......

为了避免在每次构建时在循环 ci 中全局安装 firebase-tools:

修改您的 package.json 文件以包含 firebase-tools 作为开发依赖项,如下所示:

npm install --save-dev firebase-tools

然后在你的 circle.yml 文件中:

deployment:
  production:
    branch: master
    commands:
      - ./node_modules/.bin/firebase deploy --token=$FIREBASE_TOKEN --non-interactive

【讨论】:

【参考方案3】:

对于偶然发现这个问题的其他人,这些是我必须采取的步骤才能让 CircleCI(可能还有其他任何 CI)与 Firebase Hosting 一起工作。

    生成 CI 令牌:firebase login:ci 将该令牌保存为 ENV var (FIREBASE_TOKEN) 在部署脚本中使用令牌:firebase deploy --token=$FIREBASE_TOKEN --non-interactive

Firebase 最近添加了login:ci,以防止人们将个人部署令牌用于 CI 服务。

【讨论】:

【参考方案4】:

这是我的初始设置,仅部署 master,跳过测试

    在本地计算机上运行 npm install -g firebase-tools 运行 firebase login:ci 以在本地计算机上获取令牌 运行 firebase 初始化。这将创建 firebase.json 并确保它已提交 在 circileci 项目的 BUILD SETTINGS 环境变量中配置 FIREBASE_TOKEN

//circle.yml

general:
  branches:
    only:
      - master

test:
  override:
    - echo "test"

deployment:
  production:
    branch: master
    commands:
      - npm install -g firebase-tools
      - firebase deploy --token=$FIREBASE_TOKEN --non-interactive

【讨论】:

【参考方案5】:

这是我们部署到 CircleCi 所遵循的流程。

    将您的用户名和密码作为环境变量存储在 CircleCi 中的项目级别。

    编辑你的 circle.yml

    deployment:
      production:
        branch: your_branch
        commands:
          - npm install -g firebase-tools
          - firebase login --email $FIREBASE_USERNAME --password $FIREBASE_PASSWORD
          - firebase deploy
    

    推送到你的分支

似乎工作正常。

【讨论】:

以上是关于使用 CircleCI 部署到 Firebase 托管的主要内容,如果未能解决你的问题,请参考以下文章

用于公共存储库的 CircleCI 2.0 私有环境密钥

sh CircleCI部署到NPM

CircleCI + Gradle + Heroku部署

Circleci:如何根据 git release 进行部署(发布一个标签)

GitHub + circleCI 自动构建/自动部署 应用

GitHub + circleCI 自动构建/自动部署 应用