はじめに
こんにちは!
この記事は 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 ができます。
詰まった点
自分のサイトでは functions
で node-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 をします。
終わりに
エラーログでかなりググって良い解決方法がわからず、何時間か溶かしたのでこの記事が誰かの助けになればと思います!