11
3

More than 3 years have passed since last update.

GitHub Actions で Firebase の Deploy をする

Last updated at Posted at 2020-12-01

はじめに

こんにちは!

この記事は GameWith アドベントカレンダーの2日目の記事になります!

GitHub Actions

GitHub Actions は GitHub の CI/CD サービスです。

GitHub Actions にはマーケットプレイスがあり、他の人が作成した便利な Action が利用できます。

Firebase の Deploy は上記 Action を利用すれば簡単にできます。

name: Build and Deploy
on:
  push:
    branches:
      - master

jobs:
  build_and_deploy:
    name: Build&Deploy
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Repo
        uses: actions/checkout@master
      - name: Install Dependencies
        run: npm install
      - name: Install Functions Dependencies
        run: cd functions && npm install
      - name: Deploy to Firebase
        uses: w9jds/firebase-action@master
        with:
          args: deploy
        env:
          FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}

上記のような yml ファイルで hosting, functions の Deploy ができます。

詰まった点

自分のサイトでは functionsnode-canvas を利用しているのですが、node-canvas を利用していると w9jds/firebase-action@master による Deploy が失敗します。

エラーログ

Error: Error occurred while parsing your function triggers.

Error: Error loading shared library ld-linux-x86-64.so.2: No such file or directory (needed by /github/workspace/functions/node_modules/canvas/build/Release/libpixman-1.so.0)
    at Object.Module._extensions..node (internal/modules/cjs/loader.js:1188:18)
    at Module.load (internal/modules/cjs/loader.js:986:32)
    at Function.Module._load (internal/modules/cjs/loader.js:879:14)
    at Module.require (internal/modules/cjs/loader.js:1026:19)
    at require (internal/modules/cjs/helpers.js:72:18)
    at Object.<anonymous> (/github/workspace/functions/node_modules/canvas/lib/bindings.js:3:18)
    at Module._compile (internal/modules/cjs/loader.js:1138:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1158:10)
    at Module.load (internal/modules/cjs/loader.js:986:32)
    at Function.Module._load (internal/modules/cjs/loader.js:879:14)

どうやら w9jds/firebase-action@master では node-canvas の Install ができないようです。

https://github.com/w9jds/firebase-action/blob/master/Dockerfile

Action 毎に Dockerfile が用意されており Dockerfile を見てみると、 node:12.18.1-alpine では動かないようです。

ということで自前で書いていきます。

name: Build and Deploy
on:
  push:
    branches:
      - master

jobs:
  build_and_deploy:
    name: Build&Deploy
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Repo
        uses: actions/checkout@master
      - uses: actions/setup-node@v1
      - name: Install Dependencies
        run: npm install
      - name: Install Functions Dependencies
        run: cd functions && npm install
      - name: Install firebase-tools
        run: npm install -g firebase-tools
      - name: Deploy to Firebase
        run: firebase deploy --token $FIREBASE_TOKEN
        env:
          FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}

actions/setup-node@v1 を追加し、firebase-tools をグローバルインストールします。

インストール後、firebase deploy --token $FIREBASE_TOKEN で Deploy をします。

終わりに

エラーログでかなりググって良い解決方法がわからず、何時間か溶かしたのでこの記事が誰かの助けになればと思います!

11
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
3