はじめに
こんにちは!
この記事は GameWith アドベントカレンダーの2日目の記事になります!
https://qiita.com/advent-calendar/2020/gamewith
GitHub Actions
https://github.co.jp/features/actions
GitHub Actions は GitHub の CI/CD サービスです。
GitHub Actions にはマーケットプレイスがあり、他の人が作成した便利な Action が利用できます。
https://github.com/marketplace/actions/github-action-for-firebase
Firebase の Deploy は上記 Action を利用すれば簡単にできます。
name:Build and Deployon:push:branches:-masterjobs:build_and_deploy:name:Build&Deployruns-on:ubuntu-lateststeps:-name:Checkout Repouses:actions/checkout@master-name:Install Dependenciesrun:npm install-name:Install Functions Dependenciesrun:cd functions && npm install-name:Deploy to Firebaseuses:w9jds/firebase-action@masterwith:args:deployenv:FIREBASE_TOKEN:${{ secrets.FIREBASE_TOKEN }}
上記のような yml ファイルで hosting
, functions
の Deploy ができます。
詰まった点
自分のサイトでは functions
で node-canvas
を利用しているのですが、node-canvas
を利用していると w9jds/firebase-action@master
による Deploy が失敗します。
https://www.npmjs.com/package/canvas
エラーログ
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 Deployon:push:branches:-masterjobs:build_and_deploy:name:Build&Deployruns-on:ubuntu-lateststeps:-name:Checkout Repouses:actions/checkout@master-uses:actions/setup-node@v1-name:Install Dependenciesrun:npm install-name:Install Functions Dependenciesrun:cd functions && npm install-name:Install firebase-toolsrun:npm install -g firebase-tools-name:Deploy to Firebaserun:firebase deploy --token $FIREBASE_TOKENenv:FIREBASE_TOKEN:${{ secrets.FIREBASE_TOKEN }}
actions/setup-node@v1
を追加し、firebase-tools
をグローバルインストールします。
インストール後、firebase deploy --token $FIREBASE_TOKEN
で Deploy をします。
終わりに
エラーログでかなりググって良い解決方法がわからず、何時間か溶かしたのでこの記事が誰かの助けになればと思います!