1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[GitHub Actions] コミットを作成せずに GitHub Pages へデプロイする

Last updated at Posted at 2024-09-12

ワークフローの実行中に変更したファイルを GitHub Pages へデプロイする方法のひとつとして「GitHub Actions でコミットを作成する」というものがありますが、本記事ではコミットを作成せずにデプロイします。

1. カスタムワークフローの作成

参考「ギットハブ アクション のワークフロー構文 - GitHub Enterprise Cloud Docs

1.1. push

.github/workflows/example.yml
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 の設定も可能です。

.github/workflows/example.yml (一部)

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

参考「カスタム GitHub Actions ワークフローによる公開 - GitHub Pages サイトの公開元を設定する - GitHub Docs

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?