2020-04-17

GitHub Actionsでブログを自動デプロイされるようにした

このブログがmasterにpushされると自動でFirebaseにデプロイされるようにした
本当はmasterにmergeされたらデプロイとなる方が望ましいのだろうが、まぁ個人のブログなのでブランチ運用は適当にやっている

やったこと

  • 作業ディレクトリルートに .github/workflows ディレクトリを作成し、 適当な名前.yml を配置する

  • デプロイフローを記述する(当ブログの場合は↓)

    name: Deploy to hakozaru.com
      on:
        push:
          branches:
            - master
      jobs:
        build:
          name: Build gatsbyjs
          runs-on: ubuntu-latest
          steps:
            - name: Checkout Repo
              uses: actions/checkout@master
            - name: Use Node.js 10.x
              uses: actions/setup-node@master
              with:
                node-version: "10.x"
            - name: yarn install and build
              run: |
                yarn install
                yarn run build
            - name: Upload artifact
              uses: actions/upload-artifact@master
              with:
                name: public
                path: public
    
        deploy:
          runs-on: ubuntu-latest
          name: Deploy to hakozaru.com
          needs: build
          steps:
            - name: Checkout Repo
              uses: actions/checkout@master
            - name: Download Artifact
              uses: actions/download-artifact@master
              with:
                name: public
            - name: Deploy to Firebase
              uses: w9jds/firebase-action@master
              with:
                args: deploy --only hosting
              env:
                FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }}
    
  • masterへpushする

これだけ
GitHubだけで全て完結するうえに、結構いろんなことができそうなのでかなり遊べそうな印象
無料 & privateでもそこそこ使えるのでマジですごい

ジョブ毎にファイルを共有できないので、アーティファクトupload/downloadを使ってbuildの生成物の共有を行っている以外変わったことをやっていない

秘匿情報はリポジトリのSettings => Secretsから登録すると secrets.XXXX で参照することができるので安心
Firebaseのtokenは手元で firebase login:ci して取得した

あと、Actionが失敗するとその都度メールが来てうざかったので、Actionsの通知設定やっとくといいと思う
GitHubアカウントのSettings => Notificationsの一番下にあるGitHub Actionsのチェックボックスを外す

もっと細かく調べてまとめようかと思ったけど、公式ドキュメントがとても見やすいのでやめた
時間は節約していきましょう。人生はそこまで長くない。