自動ビルド・デプロイの仕組みを作る

Markdownを編集するたびに、HTMLのビルドとFirebaseへのデプロイを手動で行うのは手間がかかります。
ここでは、CI(継続的インテグレーション)ツールを使って、Gitにプッシュしたタイミングで自動ビルドとデプロイを実現する方法を詳述します。

Firebaseのデプロイ用TOKENを取得する

CIを使って自動でFirebaseにデプロイするためのデプロイ用TOKENを取得します。

  1. コマンドラインツール(Windowsであればコマンドプロンプト、Macであればターミナル)を開く。
  2. 本プロジェクトのルートフォルダに移動する。
  3. 下記のコマンドを実行する。
$ firebase login:ci
1

ブラウザが立ち上がり、Googleアカウントのログイン画面が表示されます。

  1. Googleアカウントでログインする。

Image from Gyazo

ヒント

ログインに成功するとブラウザに下記が表示されます。 Image from Gyazo

  1. 認証用TOKENを控える。
✔  Success! Use this token to login on a CI server:

# 下記のFirebase認証用TOKENを控えておく。
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Example: firebase deploy --token "$FIREBASE_TOKEN"
1
2
3
4
5
6
  1. firebase listを実行して使用しているFirebaseプロジェクトIDを控える。
$ firebase list
+----------------------------------------------------------+
|        Name        | Project ID / Instance | Permissions |
+----------------------------------------------------------+
| jamstack (current) |      jamstack-xxxx    |    Owner    |
+----------------------------------------------------------+
1
2
3
4
5
6

ヒント

上記の例では、jamstack-xxxxがプロジェクトIDに当たります。

CircleCIのセットアップ

CircleCIと本プロジェクトのGitHubリポジトリを連携します。

  1. CircleCIにアクセスする。

  2. Sign Upをクリックする。 Image from Gyazo

  3. Sign Up with GitHubをクリックして、ご自身のアカウントでログインする。 Image from Gyazo

  4. 左ペインのADD PROJECTSをクリックして、本プロジェクトのリポジトリのSet Up Projectをクリックする。 Image from Gyazo

  5. Start buildingをクリックする。 Image from Gyazo

WORKFLOWSタブが表示され、本プロジェクトのリポジトリが追加されます。

  1. 本プロジェクトのリポジトリ名の右側にあるImage from Gyazoをクリックする。

  2. Environmental Vaiablesをクリックする。 Image from Gyazo

  3. Add Variableをクリックする。

  4. NameFIREBASE_TOKENと入力し、ValueFirebaseのデプロイ用TOKENを取得するの手順5で控えたTOKENを入力する。 Image from Gyazo

  5. Add Varibaleをクリックする。

  6. 再度Add Variableをクリックする。

  7. NameFIREBASE_PJと入力し、ValueFirebaseのデプロイ用TOKENを取得するの手順6で控えたプロジェクトIDを入力する。 Image from Gyazo

  8. Add Varibaleをクリックする。

以上でCircleCIと本プロジェクトのリポジトリが連携されました。

CircleCIの設定ファイルを作成する

環境や、ビルド、デプロイなどの処理を、config.ymlファイルに設定します。

  1. コマンドラインツール(Windowsであればコマンドプロンプト、Macであればターミナル)を開く。
  2. 本プロジェクトのルートフォルダに移動する。
  3. .circleciフォルダを作成し、その中にconfig.ymlを作成する。
  4. config.ymlに下記の内容を記載する。
version: 2
jobs:
  build:
    working_directory: ~/workspace
    docker:
      - image: node:9.11
        environment:
          TZ: "/usr/share/zoneinfo/Asia/Tokyo"
          DEPLOY_BRANCH: master

    steps:
      - checkout

      - restore_cache:
          keys:
            - yarn-packages-{{ .Branch }}-{{ checksum "yarn.lock" }}
            - yarn-packages-{{ .Branch }}
            - yarn-packages-

      - run:
          command: yarn install

      - run:
          command: yarn add firebase-tools

      - save_cache:
          paths:
            - node_moduels
          key: yarn-packages-{{ .Branch }}-{{ checksum "yarn.lock" }}

      - run:
          command: yarn build 

      - run:
          command: node_modules/.bin/firebase deploy --only hosting --project "$FIREBASE_PJ" --token "$FIREBASE_TOKEN"

workflows:
  version: 2
  build_and_deploy:
    jobs:
      - build
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
  1. CircleCIの設定ファイルをGitHubにプッシュします。
# ステージングする。
$ git add .

# コミットする。
$ git commit -m "circleci set"

# プッシュする。
$ git push origin master
1
2
3
4
5
6
7
8
  1. CircleCIにアクセスして、JOBSタブの本プロジェクトの進捗を確認する。 Image from Gyazo

ヒント

masterリポジトリにプッシュされるたびに、自動でビルド・デプロイ処理が実行されます。 ジョブのステータスはQUEDRUNNINGSUCCESSFAILEDの4種類で表示されます。各ステータスの内容は下記のとおりです。
QUED:GitHubへのプッシュをトリガーにして、CircliCIにジョブの実行を促しています。
RUNNING:ビルド・デプロイを実行しています。
SUCCESS:ビルド・デプロイに成功しました。
FAILED:ビルド・デプロイに失敗しました。

  1. ジョブステータスがSUCCESSになったら、デプロイに成功しています。

Circle CIによる自動ビルド・デプロイの設定は以上です。以降は、コンテンツを編集した後、GitHubに変更箇所をプッシュするだけで自動で変更箇所が反映されたHTMLが公開されます。

最終更新日: 2019-8-19 16:10:51