ys memos

Blog

Github ActionsでFirebase Hostingへ自動デプロイ


firebase

2021/09/18


今まで,気になりつつもずっと扱っていなかった Github Actions をついに触ることが出来た.

触れていなかった理由としては,「一人で開発していたため,ツールによる自動化よりも学習・設定のコストが高く,コマンドなどの簡易的な自動化で満足していた」という点が大きい.

しかし,複数人開発を進めていく上では,やはり必要になっていくだろうと考え,ついにやってみた.


firebaseコマンドによる自動設定に頼ろう.

init_workflow
$ firebase init hosting:github
# プロジェクトを選択
# リポジトリを入力 (ユーザ名/リポジトリ名)

途中,Firebase の認証や Github の認証が入ると思うが,ここは承認しないと次に進めない.

一応,リポジトリの Settings(ユーザの Settings ではない点に注意)に移動し,左のバーからSecretsをクリックし,FIREBASE_...の環境変数が配置されていることを確認する.


私の場合,上記のコマンドで,謎のエラーが出て,どうもうまく行かなかったので,以下のコマンドで対応し,無事自動生成された.

init_workflow_2
$ firebase init
# Hosting (Github)みたいな方を選択
# プロジェクトを選択
# リポジトリを入力
# urlのリライト Yes
# デプロイするディレクトリ build

もう一度,repository > Settings > Secretsを確認し,環境変数がセットされているかを確認する.

./.github/workflows/にファイルが生成されていることを確認する.

push_and_deploy
$ git add --all
$ git commit -m "setup github actions"
$ git push


bug_git
 ! [remote rejected] main -> main (refusing to allow a Personal Access Token to create or update workflow `.github/workflows/firebase-hosting-merge.yml` without `workflow` scope)

git コマンドに workflow の権限が与えられていない.

Github のアクセス方法の改定から,トークンによるアクセスを設定してあると思うが,それを再設定する必要がある.

Github の Settings からトークン生成(再生成ではない点に注意)画面に行き,ここでは workflow をチェックし,トークンを生成する.そして,生成されたトークンを,Workflow をプッシュするための Cli に設定する.


bug_workflow
firebase github Specified \"public\" directory \"build\" does not exist, can't deploy hosting to site

./build/が無いのが原因.普段 Deploy する際はローカルでnpm run buildし,./buildfirebase deployでデプロイする.

しかし,./build/は当然.gitignoreに入れており,リモートには存在しない.そこで,workflow にビルドコマンドを入れる必要がある.

.github/workflows/にある,firebase により自動生成された.yml2つを修正する必要がある.

firebase-hosting-merge.yml
name: Deploy to Firebase Hosting on merge
...
    steps:
      - uses: actions/checkout@v2
      - run: npm ci && npm run build
      - uses: FirebaseExtended/action-hosting-deploy@v0
        with:
          ...
firebase-hosting-pull-request.yml
name: Deploy to Firebase Hosting on PR
...
    steps:
      - uses: actions/checkout@v2
      - run: npm ci && npm run build
      - uses: FirebaseExtended/action-hosting-deploy@v0
        with:
          ...

Actions タブを見ると,エラー終了しており,エラータブを開くと以下のようなエラーがあった.

bug_workflow
Run npm ci && npm run build
npm ERR! fsevents not accessible from jest-haste-map

jest-haste-mapを明示的にインストールすることが出来た.

command_for_fix
$ npm i jest-haste-map

この事から,内部的にインストールされたパッケージが古くて使えなかったのではないかと原因を予想した(解明はしていない).


npm ciコマンドはpackage-lock.jsonを必要とするので,プッシュする.


設定した結果のレポジトリはこちら

自動デプロイだけでなく,プルリクのプレビューを表示してくれるのが,非常に便利.

今後は,様々な自動化を駆使して,開発を効率化していきたい.


関連タグを探す