追記 (2020/01/29 03:00)
Actionのジョブを実行する際のタイムゾーンを指定するようにymlファイルを修正。
env:
TZ: 'Asia/Tokyo'
前提
このブログは次のような状態で運用している(していた)。
「Hugoのデータを置いているリポジトリ」に「公開用のhtmlファイルが出力されるディレクトリ」や「テーマファイルが配置されたディレクトリ」がサブモジュールとして配置されている。
suihan74/hugo_files
にMarkdownで記事を書くhugo new posts/2020/hogehoge.md
Hugoで
public/
以下に静的ページ生成をしてpushするpublic/
はリポジトリsuihan74/suihan74.github.io
にpushするpublic/
と、テーマファイルを配置しているthemes/
はそれぞれhugo_files
のサブモジュールとして配置している
https://suihan74.github.io/に変更が反映される
今までは億劫がってCI的なことしていなかったので、記事を書くたびに「public/
をsuihan74.github.io
にpushして」「hugo_files
をpushする」みたいな手間をかけていた。
やったこと
GitHub Actions
を利用して、hugo_files
に記事をpushしたらGitHub側で勝手にpublic/
を生成してsuihan74.github.io
にデプロイするようにした。
色々よしなにやってくれるActionが公開されているので使わせてもらう。神。
方法
1. 認証に必要なものを準備する
sshキーを使う方法と個人アクセストークンを使う方法、好きな方を選ぶ。なんか検索してよく出てくるのは前者。
sshキーを使う方法
ローカル環境でssh-keygenを使って公開鍵と秘密鍵を生成する
ssh-keygen -t rsa -b 4096 -C "$(git config user.email)" -f gh-pages -N ""
秘密鍵を
hugo_files
リポジトリのSecretsに追加するSettings > Secrets
にNameを「ACTIONS_DEPLOY_KEY」として、Valueには秘密鍵の中身をコピペする。 Nameは後で記述する設定ファイルと整合していれば別に何でもいい。公開鍵を
suihan74.github.io
リポジトリのDeploy keys
に追加するSettings > Deploy keys
に公開鍵の中身をコピペする。名前は別に何でもいい。
個人アクセストークンを使う方法
アクセストークンを生成する
https://github.com/settings/tokensにアクセスして以下の内容に従ってアクセストークンを生成する。
アクセストークンを
hugo_files
リポジトリのSecretsに追加するSettings > Secrets
にNameを「MY_GITHUB_ACCESS_TOKEN」として 1. で作成したアクセストークンを設定する。
Nameは後で記述する設定ファイルと整合していれば別に何でもいい。
2. Actions用のディレクトリと設定ファイルを用意する
hugo_files/.github/workflows/main.yml
を作成する。GitHubのリポジトリページ上のメニューから作成するなりローカルで作ってpushするなりうまくやる。
ファイル名は別に何でもいい。
3. 設定ファイルを記述する
.github/workflows/main.yml
name: GitHub Pages
on:
push:
branches:
- master
jobs:
build-deploy:
runs-on: ubuntu-18.04
steps:
- name: Fix up git URLs
run: echo -e '[url "https://github.com/"]\n insteadOf = "git@github.com:"' >> ~/.gitconfig
- name: Checkout
uses: actions/checkout@v1
with:
submodules: true
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
- name: Build
run: hugo --gc --minify --cleanDestinationDir
env:
TZ: 'Asia/Tokyo'
- name: Deploy
uses: peaceiris/actions-gh-pages@v2
env:
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
# 個人アクセストークンを使う場合
#PERSONAL_TOKEN: ${{ secrets.MY_GITHUB_ACCESS_TOKEN }}
EXTERNAL_REPOSITORY: suihan74/suihan74.github.io
PUBLISH_BRANCH: master
PUBLISH_DIR: ./public
TZ: 'Asia/Tokyo'
結果
これで今後、記事の更新に関してはhugo_files
にpushするだけで自動的に更新が反映されるようになった。
やったぜ。