LoginSignup
3
4

More than 3 years have passed since last update.

CircleCIを使ってFirebaseに開発環境と本番環境へのCICDを構築する

Last updated at Posted at 2020-05-11

firebaseでの開発を効率化する為にcircleCIでのデプロイ自動化を構築してみた。

要約(目次)

  1. nuxt.jsプロジェクト作成
  2. firebaseにプロジェクトを二つ立てる(開発/本番)
  3. firebase init 手打ちで初期設定
  4. CircleCIで自動デプロイ設定

1. nuxt.jsプロジェクト作成

nuxt-create-appでnuxt.jsのプロジェクトをクリエイト。パッケージマネージャーはnpm, レンダリングモードはSPAを選んでください。
githubにリポジトリを登録。
git-flowでdevelopブランチをクリエイトする。

2. firebaseにプロジェクトを二つ立てる(開発/本番)

ここからが本題
1. firebaseコンソールで「プロジェクトを追加」をクリックしてプロジェクトを追加する。
2. 「アプリを追加」するとAPI_KEYなどが発行される。この中のprojectIdを後でCircleCIに登録する。
3. 1,2をもう一度実行して開発用プロジェクトの構築する。プロジェクト名などに_devなどと入れておくとわかりやすい。

3. firebase init 手打ちで初期設定

初回デプロイは初期設定などがあるため手動で行います。
1. firebase-toolsをインストールしてfirebase initで初期設定

$ npm install -g firebase-tools
$ firebase init

2.hostingを選択します。
3. 先ほど作成した本番firebaseプロジェクトを選択。
4. 公開フォルダはdistを指定します。

? What do you want to use as your public directory? dist

5.SPAかどうかを聞かれる、yを入力

? Configure as a single-page app (rewrite all urls to /index.html)? (y/N) y

6.index.htmlが存在すればそれを上書きするかどうか聞かれる。筆者の環境では既存プロジェクトで既にあるのでNを入力。

? File dist/index.html already exists. Overwrite? (y/N) N

これでホスティング設定は完了。確認のためデプロイしてみましょう。

$ npm run build
$ firebase deploy

7.次に開発用プロジェクトへのデプロイを行います。firebase use --addで開発用プロジェクトとも紐付けます

$ firebase use --add
? Which project do you want to add? 

firebaseの設定はこれで完了です。

4. CircleCIで自動デプロイ設定

1.「ADD PROJECT」からCircleCIプロジェクトを作成

2.CI用firebaseトークンを発行

$ firebase login:ci

Visit this URL on any device to log in:
(認証用のURL)

Waiting for authentication...

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

(トークンが表示されるので控える)

Example: firebase deploy --token "$FIREBASE_TOKEN"

3.CircleCIの環境変数を登録
スクリーンショット_2020-05-11_15_05_03.png

4.CircleCI設定ファイル作成
ルートディレクトリに.circleci/config.ymlを作成

circleci/config.yml
version: 2
jobs:
  deploy_master:
    docker:
      - image: circleci/node:latest
    steps:
      - checkout
      - run:
          name: install firebase-tools
          command: sudo npm install -g firebase-tools
      - run:
          name: install nuxt
          command: npm install nuxt
      - run:
          name: build project
          command: npm run build
      - run:
          name: Deploy Firebase Hosting
          command: firebase deploy --token $FIREBASE_CI_TOKEN --project $PROD_PROJECT_ID

  deploy_dev:
    docker:
      - image: circleci/node:latest
    steps:
      - checkout
      - run:
          name: install firebase-tools
          command: sudo npm install -g firebase-tools
      - run:
          name: install nuxt
          command: npm install nuxt
      - run:
          name: build project
          command: npm run build
      - run:
          name: Deploy Firebase Hosting
          command: firebase deploy --token $FIREBASE_CI_TOKEN --project $DEV_PROJECT_ID

workflows:
  version: 2
  build_and_deploy: # ワークフローの名前
    jobs:
      - deploy_dev: # 上で定義したジョブを指定します
          filters:
            branches:
              only: develop # developブランチのみを実行対象とします
      - deploy_master:
          filters:
            branches:
              only: master # masterブランチのみを実行対象とします

これでdevelopブランチにpushかmergeすると開発用firebaseプロジェクトに、masterブランチだと本番用プロジェクトにデプロイされます。

3
4
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
3
4