Netlify への JSON publish を GitHub Actions に移行

以前 Tumblr の JSON データを Netlify で定期的に配信するようにしました。

blog.kondoumh.com

その時は GCP の Cloud Scheduler を使って定期的に GitHub repo の Master branch を取得しデプロイ時に Netlify build を使って JSON ファイルを生成していました。Netlify にはスケジューラ機能がないので外部から Webhook で build をトリガーする必要があったのです。

f:id:kondoumh:20200504201440p:plain

この CI を GitHub Actions に移行しました。GCP の無料トライアル期間がもうすぐ切れるのと、GitHub Actions の方が NPM Script を実行するだけでなく色々できるからです。スケジューラも自前で持っていますし。

GitHub の Marketplace に Netlify API を使って Deploy をやってくれる Action がありました。

github.com

Netlify API を使うため対象サイトの settings > general で API ID を取得します。

f:id:kondoumh:20200504100957p:plain

Netlify へのアクセストークンを Netlify App のページで発行します。

Netlify App

各トークンや API ID をリポジトリの Secrets に登録しておきます。スケジュール起動で 9時と21時*1に Tumblr から JSON データを取得し Netlify サイトにデプロイする Action はこんな風に書けます。

name: Build and publish

on:
  schedule:
    - cron:  '0 9,21 * * *'

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Use Node.js 12.x
      uses: actions/setup-node@v1
      with:
        node-version: 12.x
    - name: Fetch posts data from tumblr
      run: |
        npm install
        npm run env
      env:
        BLOG_IDENTIFIER: ${{ secrets.BLOG_IDENTIFIER }}
        BLOG_API_KEY: ${{ secrets.BLOG_API_KEY }}

    - name: Deploy to netlify
      uses: nwtgck/actions-netlify@v1.0
      with:
        publish-dir: './public'
        production-branch: master
        github-token: ${{ secrets.GITHUB_TOKEN }}
        deploy-message: "Deploy from GitHub Actions"
      env:
        NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }}
        NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }}

以前は、Slack に通知してましたが、actions-netlify が GItHub に通知してくれるし、通知もさほど重要じゃないのでやめました。

構成はこんな感じになりました。

f:id:kondoumh:20200504201558p:plain

Netlify の Edge サービスとしての利便性を享受しつつ GitHub Actions のリッチなパイプラインが使えるというのは悪くない感じします。

*1:UTC なので Asia/Tokyo TZ では 18時と6時ですが。