10
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Github Actionsでfirebaseに自動デプロイ(CI/CD)環境を構築する方法

Last updated at Posted at 2020-09-22

#はじめに
Github ActionsにてCI/CD環境を構築したのでメモ代わりにまとめてみました。
今回はGithub Actionsを用いたCI/CDが目的なのでfirebaseにデプロイするだけの場合は以下にわかりやすい記事のリンクを貼っておくので確認してみてください!!
・Firebaseで初めてのデプロイ

#Github Actionsについて
####Github Actionsとは
Githubが提供する機能の一部でCI(継続的インテグレーション)/ CD(継続的デリバリー)が実行できます。

####CI/CDとは
テストや本番環境へのデプロイを自動化する仕組みのこと
image.png

####個人的にGithub Actionsいいなって思ったところ
①レポジトリ配下にある.git/workflows/に.ymlファイルを作成して書くだけでGithub Actionsを使用できる!!
②github上のActionsからカスタマイズされたワークフローが選択でき、直接.ymlファイルを生成できる

###Github Actionsの使い方
####00.firebase認証トークンの設定
まずデプロイの際に必要になるfirebase認証トークンを設定していく


firebase login:ci

firebase CLIがGoogleアカウントへのアクセスをリクエストしてくるので、許可してトークンを控えておきます。
ログインすると以下のように出てくる

Waiting for authentication...

✔  Success! Use this token to login on a CI server:

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

そのトークンをSecretsのFIREBASE_TOKENのvalueに入れて設定する
スクリーンショット 2020-09-22 22.55.59.png

####01.Github Actionsにて非公開にしたい変数を登録して使用する
APIkeyや環境変数など晒したくない情報はGithubのSecretsに変数を登録することで公開されることなく利用することができます。
手順①SettingsからSecretsをクリック
スクリーンショット 2020-09-22 22.13.15.png
手順②Secretsに変数としてenvファイルのAPIkeyなどを追加していく
スクリーンショット 2020-09-22 22.20.12.png

####02.YAMLファイルの作成とワークフローの実行
※Githubアカウントにログインしてレポジトリを作成できている上での説明になります
手順①作成したレポジトリのActionsにいき、New workflowをクリック
スクリーンショット 2020-09-22 15.04.27.png
手順②Set up this workflowからワークフローを作成!!
基本的にsuggestされているけどこのページの下にもさまざまなワークフローが用意されている。
スクリーンショット 2020-09-22 18.02.30.png
手順③レポジトリの.github/workflows/配下にYAMLファイルが作成されるのでカスタマイズ
ここでは、masterにpushされたら、 ubuntu-latest のdockerイメージをもちいて、 steps: 以降の処理を順次実行していってます。
steps: の中の uses: で使用するライブラリを指定、run: で実行するコマンドを記述していきます。

.github/workflows/deploy.yml

name: demo-app
on:
  push:
    branches:
      - master
jobs:
  firebase-deploy:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@master
      - run: yarn install
      - run: yarn build
        env:
          FIREBASE_API_KEY: ${{ secrets.FIREBASE_API_KEY }}
          FIREBASE_AUTH_DOMAIN: ${{ secrets.FIREBASE_AUTH_DOMAIN }}
          FIREBASE_DATABASE_URL: ${{ secrets.FIREBASE_DATABASE_URL }}
          FIREBASE_PROJECT_ID: ${{ secrets.FIREBASE_PROJECT_ID }}
          FIREBASE_STORAGE_BUCKET: ${{ secrets.FIREBASE_STORAGE_BUCKET }}
          FIREBASE_MESSAGING_SENDER_ID: ${{ secrets.FIREBASE_MESSAGING_SENDER_ID }}
          FIREBASE_APP_ID: ${{ secrets.FIREBASE_APP_ID }}
          FIREBASE_MEASUREMENT_ID: ${{ secrets.FIREBASE_MEASUREMENT_ID }}
      - uses: w9jds/firebase-action@master
        with:
          args: deploy --only hosting
        env:
          FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}

#####envファイルを書く場所がわからなくてエラーから抜け出せなかった件について(´゚д゚`)

.github/workflows/deploy.yml

name: demo-app
on:
  push:
    branches:
      - master
jobs:
  firebase-deploy:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@master
      - run: yarn install
      - run: yarn build
      - uses: w9jds/firebase-action@master
        with:
          args: deploy --only hosting
        env:
          FIREBASE_API_KEY: ${{ secrets.FIREBASE_API_KEY }}
          FIREBASE_AUTH_DOMAIN: ${{ secrets.FIREBASE_AUTH_DOMAIN }}
          FIREBASE_DATABASE_URL: ${{ secrets.FIREBASE_DATABASE_URL }}
          FIREBASE_PROJECT_ID: ${{ secrets.FIREBASE_PROJECT_ID }}
          FIREBASE_STORAGE_BUCKET: ${{ secrets.FIREBASE_STORAGE_BUCKET }}
          FIREBASE_MESSAGING_SENDER_ID: ${{ secrets.FIREBASE_MESSAGING_SENDER_ID }}
          FIREBASE_APP_ID: ${{ secrets.FIREBASE_APP_ID }}
          FIREBASE_MEASUREMENT_ID: ${{ secrets.FIREBASE_MEASUREMENT_ID }}
          FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}

最初は上記のようにenvを一番最後に記述していたところfirebaseのkeyがinvalidだよと怒られていました(汗)
keyとかはyarn buildした段階で設定しないといけないみたい。

####03.envファイルに書いたkeyを環境変数に入れる

next.config.js
module.exports = {
  env: {
    FIREBASE_API_KEY: process.env.FIREBASE_API_KEY,
    FIREBASE_AUTH_DOMAIN: process.env.FIREBASE_AUTH_DOMAIN,
    FIREBASE_DATABASE_URL: process.env.FIREBASE_DATABASE_URL,
    FIREBASE_PROJECT_ID: process.env.FIREBASE_PROJECT_ID,
    FIREBASE_STORAGE_BUCKET: process.env.FIREBASE_STORAGE_BUCKET,
    FIREBASE_MESSAGING_SENDER_ID: process.env.FIREBASE_MESSAGING_SENDER_ID,
    FIREBASE_APP_ID: process.env.FIREBASE_APP_ID,
    FIREBASE_MEASUREMENT_ID: process.env.FIREBASE_MEASUREMENT_ID,
  },
};

process.env.NODE_ENV

envファイルの値を参照するにはprocess.env.で参照できます。

####04.masterにプッシュしてデプロイされるのを確認してみる
スクリーンショット 2020-09-22 23.17.30.png
デプロイが成功できたのが確認できたら、プロジェクト名.web.appでページを開いて確認!!!
これで自動デプロイの完成です。

###感想
CI/CD構築するということに難しそうという抵抗感があってなかなか進みませんでしたが、Gihub Actionsが便利すぎ!!!
ただ.ymlファイルに記述の仕方がいまいち理解できていなかったりAPIkeyを環境変数に入れて使用することに戸惑ったりしました。
これからもこんな感じで新しく学んだことはqiitaに軽くメモ程度に書いて投稿していこうと思いました。
###参考文献

CI/CDとは???

https://pfs.nifcloud.com/navi/words/ci_cd.htm

Github Actionsについて

https://developer.yukimonkey.com/article/20200422/

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?