Firebase CLIのfirebase init
にある、
「Set up GitHub Action deploys」をちょっと試してみたときの備忘録(*´ω`*)
実行すると
- サービスアカウントの作成
github-action-<project-no>@<project-id>.iam.gserviceaccount.com
- GitHub ActionsのSecretsの作成
FIREBASE_SERVICE_ACCOUNT_<PROJECT_ID>
- 中身はサービスアカウントのキーファイルのダンプ
- workflow fileの作成
- developへのpush時にLive chanelへのデプロイ
firebase-hosting-merge.yml
- PRマージ時にReleseへデプロイ
firebase-hosting-pull-request.yml
- developへのpush時にLive chanelへのデプロイ
をしてくれるっぽい。
実行してみる
「Hosting: Set up GitHub Action deploys」を選択すると、
利用するアカウントを聞かれ、いろいろ作成される。
$ firebase init ... ? Which Firebase features do you want to set up for this directory? Press Space to select features, then Enter to confirm your choices. (Press <space> to select, <a> to toggle all, <i> to invert selection, and <enter> to proceed) ◯ Hosting: Configure files for Firebase Hosting and (optionally) set up GitHub Action deploys ❯◉ Hosting: Set up GitHub Action deploys
サービスアカウントの作成
作成されたサービスアカウントはこんな感じ。
権限は以下が設定されている。
- API キー閲覧者
- Cloud Functions 開発者
- Cloud Run 閲覧者
- Firebase Authentication 管理者
- Firebase Hosting 管理者
GitHub ActionsのSecretsの作成
作成されたGitHub ActionsのSecretsはこんな感じ。
なにが入っているか確認するために、
secrets.FIREBASE_SERVICE_ACCOUNT
の中身をファイルに出力してみると、
- run | echo '${{secrets.FIREBASE_SERVICE_ACCOUNT}}' > $HOME/gcloud-service-key.json cat $HOME/gcloud-service-key.json
こんな感じの形式で入っているっぽい。
*** type: service_account, // ... 略 universe_domain: googleapis.com ***
workflow fileの作成
作成されるworkflow fileはこんな感じ。
FirebaseExtended/action-hosting-deployを使ってデプロイするよう。
firebase-hosting-pull-request.yml
### .github/workflows/firebase-hosting-pull-request.yml # This file was auto-generated by the Firebase CLI # https://github.com/firebase/firebase-tools name: Deploy to Firebase Hosting on PR 'on': pull_request jobs: build_and_preview: if: '${{ github.event.pull_request.head.repo.full_name == github.repository }}' runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - run: npm ci && npm run build - uses: FirebaseExtended/action-hosting-deploy@v0 with: repoToken: '${{ secrets.GITHUB_TOKEN }}' firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_<PROJECT_ID> }}' projectId: <project-id>
firebase-hosting-merge.yml
### .github/workflows/firebase-hosting-merge.yml # This file was auto-generated by the Firebase CLI # https://github.com/firebase/firebase-tools name: Deploy to Firebase Hosting on merge 'on': push: branches: - develop jobs: build_and_deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - run: npm ci && npm run build - uses: FirebaseExtended/action-hosting-deploy@v0 with: repoToken: '${{ secrets.GITHUB_TOKEN }}' firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_<PROJECT_ID> }}' channelId: live projectId: <project-id>
FirebaseExtended/action-hosting-deployを使わずにデプロイする
FirebaseExtended/action-hosting-deployはhosting専用のため、
functionsとかのデプロイはできない。
ソースやissueを探していると、secrets.FIREBASE_SERVICE_ACCOUNT
を使って、
Firebase CLIを使えるようにできるっぽい。
- name: Deploy to Firebase run: | echo '${{secrets.FIREBASE_SERVICE_ACCOUNT}}' > $HOME/gcloud-service-key.json export GOOGLE_APPLICATION_CREDENTIALS="$HOME/gcloud-service-key.json" firebase deploy --only hosting,functions
FirebaseExtended/action-hosting-deployの中でも、
secrets.FIREBASE_SERVICE_ACCOUNT
をjsonファイルに吐き出して、env.GOOGLE_APPLICATION_CREDENTIALS
にjsonファイルのパスを設定し、- Firebase CLIが
env.GOOGLE_APPLICATION_CREDENTIALS
を使って認証する
という形を取っているのをうまく利用できるよう。
ただ、作成されたサービスアカウントはhositingようなので、
必要な権限が足りずにデプロイが失敗するので、必要なロール(役割)を追加しないといけない。
(Cloud Functions 開発者/Artifact Registry 書き込み/Firebase ルール管理者などなど)
以上!! サービスアカウントとかの自動作成は便利だけど、
ゴニョゴニョするといろいろデプロイできるようになるのでよさそう(´ω`)