ワークフローの実行中に変更したファイルを GitHub Pages へデプロイする方法のひとつとして「GitHub Actions でコミットを作成する」というものがありますが、本記事ではコミットを作成せずにデプロイします。
1. カスタムワークフローの作成
参考「ギットハブ アクション のワークフロー構文 - GitHub Enterprise Cloud Docs」
1.1. push
時
name: Deploy content to Pages
on:
push:
branches:
- main
workflow_dispatch:
concurrency:
group: pages
cancel-in-progress: false
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Pages
uses: actions/configure-pages@v5
- name: Create file
run: date > docs/date.txt
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: docs
deploy:
permissions:
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
参考「GitHub Pages でのカスタム ワークフローの使用 - GitHub Docs」
参考「starter-workflows/pages at main · actions/starter-workflows · GitHub」
1.1.1. ワークフロー
設定:
-
push
時に実行するon.push
- Actions から手動実行出来るようにする
on.workflow_dispatch
- 多重起動しないようにする
concurrency.group
- 既に実行開始している場合は中止しない
concurrency.cancel-in-progress: false
※権限 permissions.contents: read
はデフォルトの設定が write
の場合に書き込みが行われないようにするための設定なため、必須ではありません。
参考「既定の GITHUB_TOKEN のアクセス許可の構成 - リポジトリの GitHub Actions の設定を管理する - GitHub Docs」
1.1.2. build
ジョブ
ここでは以下のスクリプトを実行してファイルを動的に生成します。
date > docs/date.txt
ステップ:
- リポジトリにアクセス出来るようにする
uses: actions/checkout@v4
- GitHub Pages を有効化する
uses: actions/configure-pages@v5
- 成果物をアップロードする
uses: actions/upload-pages-artifact@v3
- ディレクトリを指定
path: docs
ディレクトリ docs
内に存在する静的なファイルも含めてアップロードされます。
1.1.3. deploy
ジョブ
設定:
- GitHub Pages へのデプロイ時に必要な権限
permissions.pages: write
permissions.id-token: write
- デプロイ環境
environment.name: github-pages
environment.url: ${{ steps.deployment.outputs.page_url }}
ステップ:
- アップロードされた成果物をデプロイする
id: deployment
uses: actions/deploy-pages@v4
ステップの出力から GitHub Pages のサイト URL を取得し、デプロイ環境の URL を設定します:
steps.deployment.outputs.page_url
参考「jobs..steps[*].id - ギットハブ アクション のワークフロー構文 - GitHub Enterprise Cloud Docs」
参考「steps context - Accessing contextual information about workflow runs - GitHub Enterprise Cloud Docs」
参考「Outputs - actions/deploy-pages at v4.0.5」
参考「jobs..environment - ギットハブ アクション のワークフロー構文 - GitHub Enterprise Cloud Docs」
1.2. push
時および cron
schedule
時
ワークフローのトリガーを追加することで cron
の設定も可能です。
on:
push:
branches:
- main
schedule:
- cron: '45 21 * * *'
workflow_dispatch:
※ GitHub Pages の cron
は遅延が発生したりジョブの一部が破棄される場合があります。
参考「schedule - ワークフローをトリガーするイベント - GitHub Docs」
参考「Crontab.guru - The cron schedule expression generator」
ワークフローからのデプロイは「アクティビティ」とみなされないため、「ワークフローが 60 日で無効化されないようにする」対策が必要です。
参考「[GitHub Actions] ワークフローが 60 日で無効化されないようにする - Qiita」
2. リポジトリの設定
リポジトリの設定を変更することで、Github Actions から GitHub Pages へデプロイ可能になります。
※ワークフロー自体は GitHub Pages の設定に影響しませんが、ワークフローが GitHub Pages へデプロイすると自動で設定に反映されます。
Settings:
- Code and automation
Pages- Build and deployment
Source: Github Actions
- Build and deployment
参考「カスタム GitHub Actions ワークフローによる公開 - GitHub Pages サイトの公開元を設定する - GitHub Docs」