GitHubにpushしたらGitHub Pagesに自動デプロイする[GitHub Actions]

面倒だとブログを書かない。
なので極力面倒をなくすために、静的コード生成およびGitHub Pagesへのデプロイを自動化した。

目次

やりたいこと

現状のブログ公開の流れ(before)

  1. 記事記載用ページ生成
    1
    $ hexo new post xxxxx
  2. 生成されたxxxxx.mdにブログ内容を書く
  3. 静的コード生成 & GitHub Pagesにデプロイ
    1
    $ hexo generate -deploy
  4. 記事管理用リポジトリに作成したコードをコミット

自動化後(after)

  1. 記事記載用ページ生成
    1
    $ hexo new post xxxxx
  2. 生成されたxxxxx.mdにブログ内容を書く
  3. 記事管理用リポジトリに作成したコードをコミット
    自動でGitHub Pages用リポジトリにデプロイ

自動化実現のための設定方法

  • GitHub Actionsでデプロイ用のjob用意
    以下yamlを用意し、.github/workflows配下に配置する。
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
name: Hexo generate and deploy to GitHub Pages

on:
push:
branches: [ main ] # mainブランチにデプロイされたされたら起動
# https://docs.github.com/ja/actions/reference/events-that-trigger-workflows

jobs:
build:

runs-on: ubuntu-latest

strategy:
matrix:
node-version: [14.x] # LTSが14.17.5だったので14を指定しておく

steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }} # node使う
uses: actions/setup-node@v2
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- run: npm ci # 初期設定 (packages.jsonに記載のライブラリをインストール)
# hexoのインストールとかはpackage.jsonに記載されている想定

- name: Configuration environment # デプロイ用のクレデンシャル情報設定
env:
HEXO_DEPLOY_PRI: ${{secrets.HEXO_DEPLOY_PRI}}
run: |
mkdir -p ~/.ssh/
echo "$HEXO_DEPLOY_PRI" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
git config --global user.name "xxxxx"
git config --global user.email "xxxxxxxxxxxxxxx@mail.com"
- name: Deploy hexo # 生成&デプロイ
run: |
npx hexo clean && npx hexo generate -deploy

  • HEXO_DEPLOY_PRIHEXO_DEPLOY_PUB の用意
    以下コマンド実行し、ED25519鍵を生成する。
    参考:新しい SSH キーを生成して ssh-agent に追加する

    1
    $ ssh-keygen -t ed25519 -C "your_email@example.com" -f github-deploy-key

    passphraseはGitHub Actions上で入力できないので、空としておく。

    github-deploy-keyとgithub-deploy-key.pubが生成される。
    github-deploy-keyはHEXO_DEPLOY_PRIで、HEXO_DEPLOY_PUBはgithub-deploy-key.pubを設定する。

    • HEXO_DEPLOY_PRI
      記事管理用リポジトリにて、github-deploy-keyに記載の内容を

      Settings > Secrets > New Repository secret

      に、HEXO_DEPLOY_PRIという変数名で保存する

    • HEXO_DEPLOY_PUB
      GitHub Pages用リポジトリにて、github-deploy-key.pubに記載の内容を

      Settings > Deploy keys > Add deploy key

      に、HEXO_DEPLOY_PUBという変数名で保存する

以上。
この設定で、mainブランチにpushされたときにnpx hexo clean && npx hexo generate -deployが実行される。

ちなみに hexo generate -deployでデプロイする宛先等の設定値は_config.ymlに記載されている値が使われる。

おわりに

簡単に自動化できた。
GitHub Actionsでもうちょっと遊ぶ。