[GitHub Actions] Github Pagesをcron的に定期的に自動デプロイする方法

2 min read

背景

API や submodule などのリソースを含んだリポジトリがある。ソース自体には変更はないが、それらが定期的に更新される仕組みとなっているため、ホスティング先の GitHub Pages を定期的に更新したい。

環境

  • GitHub のリポジトリ
  • GitHub Pages(ブランチ名は gh-pages)
  • Nuxt.js
    今回の環境では Nuxt.js の静的ジェネレート(nuxt generate)を利用していた

方法

自動化には GitHub Actions を利用する。

具体的なワークフローは以下の通り。

name: github pages deploy

on:
  push:
    branches:
      - master
  schedule:
    - cron: "0 0 * * *"

jobs:
  build-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v1

      - name: Install
        run: yarn install --frozen-lockfile

        # === 中略 === "
      - name: Generate
        run: yarn run generate

      - name: deploy
        uses: peaceiris/actions-gh-pages@v3
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./dist

トリガー

トリガーイベントでscheduleを設定する。

on:
  schedule:
    # * はYAMLに置ける特殊文字なので、この文字列は引用符で囲まなければならない
    - cron: "*/15 * * * *"

クーロン構文でcronにスケジュール設定ができる。

docs.github.comワークフローをトリガーするイベント - GitHub DocsGitHub で特定のアクティビティが実行された時、スケジュールした時間、または GitHub 外でイベントが発生した時にワークフローを実行できるよう設定できます。

ジョブ

jobsについては、以下の通り。

  1. リポジトリのチェックアウト
  2. 依存モジュールのインストール
  3. ビルド
  4. デプロイ

GitHub Pages には peaceiris/actions-gh-pages@v3 を利用してデプロイしている。