LoginSignup
1
1

Firebase Hostingへデプロイする(GitHubActions/GitLab-CI)

Last updated at Posted at 2024-04-20

はじめに

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を発行する(共通)

  1. firebaseのプロジェクトにアクセスし,プロジェクトの設定ページを開く
  2. 画面上部のタブからサービスアカウントを選択
  3. 右上にあるサービスアカウント権限の管理をクリック
    firebaseConsole.png
  4. 画面上部の+サービスアカウントの作成をクリック
  5. サービスアカウント名を入力し,作成して続行をクリック
    serviceAccount.png
  6. ロールにはFirebase Hosting 管理者を設定
    • Hostingに使用するアカウントの権限を決めているだけという認識なので,Authenticationの機能を使用していてもこのロールだけで運用しています.問題があるならばご指摘いただきたいです.
      スクリーンショット 2024-04-20 224535.png
  7. 続行をクリックし,そのまま完了をクリック
  8. 作成したサービスアカウントの操作の項目から,鍵を管理を選択
    スクリーンショット 2024-04-20 235246.png
  9. 鍵を追加 > 新しい鍵を作成をクリックし,JSONが選択されていることを確認し,作成をクリック
  10. 鍵が自動でダウンロードされるので,任意の場所に移動させる
  11. ダウンロードしたJSONファイルをbase64でエンコードする
    // Ubuntu
    base64 --wrap=0 < {ファイル名}.json
    // Windows
    certutil -f -encode {ファイル名}.json {出力ファイル名}.txt
    
  12. エンコードした内容は,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について書いてみました。
どちらか一方についてしか触れていないページが多く感じたので、両方に触れている人にとって有益な投稿になればと思います。

初投稿かつ、初アウトプットをやってみましたが、自分でよくわかっていない箇所が明確になった気がするので今後も続けていけたらと思っています。

参考

How to Deploy Firebase Functions in CI using a Service Account Key with GOOGLE_APPLICATION_CREDENTIALS

1
1
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
1
1