はじめに
githubActionsを使用しCI/CDを使用したとき、認証が上手くいかなかったため解決方法をまとめさせていただきます。
エラー内容
Error: Failed to authenticate, have you run firebase login?
Error: Process completed with exit code 1.
発生タイミング
・GitHub Actions など CI/CD 上で firebase deploy を実行したとき
・ローカルでは問題なくても、CI 上ではエラーになることがある
エラーの意味
・Firebase CLI が 認証情報を持っていないため、デプロイできない
・firebase loginが必要、と言われていますが、CI 上でブラウザログインはできない
CI上で認証エラーが発生する理由
・CI/CD 環境は 新しいマシン で、ローカルの Firebase 認証情報は存在しません
・npx firebase deployは、CLIがログイン済みであることを前提に動くため、未認証では失敗します
解決方法 : サービスアカウントJSONを使用する
1,Firebaseコンソールでサービスアカウントを作成
→FirebaseConsole → プロジェクトの設定 → サービスアカウント → 新しい秘密鍵を生成 → JSONファイルを保存
2,JSONファイルをGitHub Secretsへ登録
→githubのプロジェクトへ移動 → Settig → Secrets and variables → Actions →New repository secretに登録
(nameは好きな名前を選択。今回は「FIREBASE_KEY」: jsonファイルは全選択し貼り付け)
3,GitHub ActionsでJSONを読み込み、環境変数 GOOGLE_APPLICATION_CREDENTIALS に渡す
- name: Deploy to Firebase Hosting
uses: FirebaseExtended/action-hosting-deploy@v0
with:
repoToken: "${{ secrets.GITHUB_TOKEN }}"
firebaseServiceAccount: "${{ secrets.FIREBASE_KEY }}"
projectId: "indiegame-hub"
channelId: "live"
・JSON を直接渡すだけで CI 上で認証可能
・firebase login は不要
まとめ
・今回のエラーは「認証情報がないままCLI」を実行した」ことが原因
・CI/CDではブラウザログインは使えないため、サービスアカウントJSONファイルを作成し、公式Actionを使用するのが安全である。
・Secrets に JSON を登録し、CI上で渡すだけで解決可能
JISOUのメンバー募集中!
プログラミングコーチングJISOUでは、新たなメンバーを募集しています。
日本一のアウトプットコミュニティでキャリアアップしませんか?
興味のある方は、ぜひホームページをのぞいてみてください!