はじめに
gitlab-ciのログを眺めていると以下のような文言を見つけました.
$ firebase deploy --token $FIREBASE_TOKEN
⚠ Authenticating with `--token` is deprecated and will be removed in a future major version of `firebase-tools`. Instead, use a service account key with `GOOGLE_APPLICATION_CREDENTIALS`: https://cloud.google.com/docs/authentication/getting-started
トークンを使用したfirebase deployが将来廃止されるので,代わりにservice account keyを使用しなさいとのことでした.
今までトークンを使用していたのですが,廃止になってから対応するのでは遅いと思いますのでkeyを使った方法の調査および修正を行いました.
調査中,トークンを使用した方法を紹介しているページが多いように感じたので,自分用の備忘録も兼ねて記事の作成に至りました.
Web系開発を始めて2年目ですので,間違いや非効率な箇所がありましたらご指摘いただけますと幸いです.
前提条件
デプロイの前に以下が完了していることを確認してください.
- Firebaseでプロジェクトの作成が済んでいる
- Githubのリポジトリ/Gitlabのプロジェクトにdeployするアプリがあり,トークンを使用する方法でdeployが可能
Google Service Accountからkeyを発行する(共通)
- firebaseのプロジェクトにアクセスし,プロジェクトの設定ページを開く
- 画面上部のタブから
サービスアカウント
を選択 - 右上にある
サービスアカウント権限の管理
をクリック
- 画面上部の
+サービスアカウントの作成
をクリック - サービスアカウント名を入力し,
作成して続行
をクリック
- ロールには
Firebase Hosting 管理者
を設定 -
続行
をクリックし,そのまま完了
をクリック - 作成したサービスアカウントの
操作
の項目から,鍵を管理
を選択
-
鍵を追加
>新しい鍵を作成
をクリックし,JSON
が選択されていることを確認し,作成
をクリック - 鍵が自動でダウンロードされるので,任意の場所に移動させる
- ダウンロードしたJSONファイルをbase64でエンコードする
// Ubuntu base64 --wrap=0 < {ファイル名}.json // Windows certutil -f -encode {ファイル名}.json {出力ファイル名}.txt
- エンコードした内容は,secret(Github)やCI/CD変数(Gitlab)に保存しておく
Github Actions
Workflow fileに以下のような内容を記述/追記. private-key.jsonは任意の名称で問題ありません.
jobs:
build_and_deploy:
runs-on: ubuntu-latest
env:
GOOGLE_APPLICATION_CREDENTIALS: pribate-key.json
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Install Dependencies and Build
run: yarn install && yarn run build
- name: Setup Firebase
run: yarn global add firebase-tools
- name: Prepare Google Application Credentials
shell: bash
run: |
echo "${{ secretsに登録した名称 }}" | base64 --decode > "private-key.json"
- name: Deploy Firebase functions
shell: bash
run: firebase deploy --only hosting
- name: Remove Credentials File
if: success() || failure()
run: |
rm private-key.json
Gitlab CI
gitlab-ci.ymlに以下のような内容を記述/追記.private-key.jsonは任意の名称で問題ありません.
firebase:
stage: deploy
before_script:
- echo -n $登録したCI/CD変数の名前 | base64 -d > private-key.json
- export GOOGLE_APPLICATION_CREDENTIALS="private-key.json"
script:
- firebase deploy - only hosting
感想
業務ではGitLabを使用していますが、自学用にGitHubでコード管理しているので、両方でのHostingについて書いてみました。
どちらか一方についてしか触れていないページが多く感じたので、両方に触れている人にとって有益な投稿になればと思います。
初投稿かつ、初アウトプットをやってみましたが、自分でよくわかっていない箇所が明確になった気がするので今後も続けていけたらと思っています。