Aton-Kish / HugoをGitHub Pagesに自動デプロイする
Created 2020-09-10 22:23:37 Modified 2020-11-27

834 Words

Hugo を GitHub Pages に自動デプロイする

GitHub Actions を使って Hugo のビルド、GitHub Pages へのデプロイを自動化する方法

参考

構成

GitHub Pages でデプロイするためにはレポジトリが Public でなければならないが、 ドラフトも含めて Public に公開されてしまうのは嫌なので、 Hugo をビルドした生成物だけを管理する Public レポジトリを用意する

deploy-hugo-to-ghpages

repositoryTypeDescription
blog-sourcePrivateHugo のプロジェクト全体を管理するレポジトリ
blogPublicHugo の生成物のみを GitHub Pages で公開するレポジトリ
  1. blog-source レポジトリに Push する
  2. GitHub Actions によって自動で Hugo ビルド、生成物が blog レポジトリへ Push される
  3. blog レポジトリが GitHub Pages にデプロイされる

事前準備

別のレポジトリへ自動 Push するために GitHub の Personal access token が必要

  1. Personal access tokens 設定画面にアクセスする
  2. Generate new token でトークン生成
    • Select scopes はrepoを選択
    • Note は Hugo デプロイ用とわかるように適当につける
    • 生成されたトークンをコピーしておく
  3. blog-source レポジトリの Settings > Secrets からトークンを登録する
    • Name は適当に、ここではHUGO_DEPLOY_TOKENとしておく(後で使う)
    • Value にはコピーしておいたトークンをペーストする

GitHub Actions

前半はほぼGitHub Actions による GitHub Pages への自動デプロイ - Qiitaの通りです
後半をPush directory to another repository · Actions · GitHub Marketplaceに書き換える

  1. .github/workflows/deploy-hugo.ymlを作成

    name: Deploy Hugo
    
    # GitHub Actionsのトリガーを好きなように設定する
    on:
    push:
        branches:
        - master
    
    jobs:
    deploy:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v2
            with:
            submodules: true
            fetch-depth: 0
    
        - name: Setup Hugo
            uses: peaceiris/actions-hugo@v2
            with:
            # Versionは最新のものにする
            hugo-version: "0.74.3"
    
        - name: Build
            run: hugo --minify
    
        - name: Push to blog repo
            uses: cpina/github-action-push-to-another-repository@master
            env:
            # 事前準備で登録しておいたトークン名を書く
            API_TOKEN_GITHUB: ${{ secrets.HUGO_DEPLOY_TOKEN }}
            with:
            # Hugoは`public`ディレクトリにビルド生成物を出力するので
            source-directory: "public"
            # blogレポジトリの所有者アカウント名
            destination-github-username: "DESTINATION-GITHUB-USERNAME"
            # 生成物をPushするレポジトリ名(今回はblog)
            destination-repository-name: "blog"
            # メールアドレス
            user-email: YOUR@MAIL.ADDRESS
    
  2. materブランチに Push するだけで自動デプロイ、Push が始まる

  • blog レポジトリのmaterブランチの/ (root)を GitHub Pages で公開するように設定しておけば OK