GitHub Actions
JekyllサイトをGitHub Pagesで構築する時、標準的なフローは、セキュリティ上の理由と、サイトのセットアップをより簡単にするために制限されています。ビルドをより詳細に制御し、GitHub Pagesでサイトをホストするために、GitHub Actionsを使用できます。
Actionsを使用する利点
gemsetの制御
- Jekyll version — 現在有効な
3.8.5
にかわり、好きなバージョンのJekyllを使用できます。たとえば、4.0.0
やリポジトリを直接ポイントします。 - Plugins — サポートされているバージョンリストにあるかどうかに関係なく、Jekyllプラグインを使用できます。サイトの
_plugins
ディレクトリに配置された*.rb
ファイルも使用できます。 - Themes — Actionsなしでカスタムテーマを使用することは可能ですが、より簡単になります。
ワークフローの管理
- Customization — Actionsを実行するワークフローファイルを作成することにより、カスタムビルドステップを指定したり、環境変数を使用したりできます。
- Logging — ビルドログは表示され、詳細に調整できるため、Actionsを使用してエラーをデバッグするのがよりに簡単になります。
ワークスペースのセットアップ
何よりもまず必要なのは、GitHubでホストされているJekyllプロジェクトです。既存のJekyllプロジェクトを選択するか、リポジトリがまだホストされていない場合はクイックスタートに従ってGitHubにプッシュします。
このページでは、master
ブランチからのビルドのみを取り上げます。ですので、master
ブランチで作業していることを確認してください。必要に応じて、デフォルトのブランチに基づいて作成できます。
Actionがサイトを構築すると、書き出しディレクトリのコンテンツが自動的にgh-pages
ブランチにプッシュされ、配信に使用できるようになります。
ここで使用するActionは、デプロイが成功するたびにgh-pages
ブランチを作成(または既存のものをリセット)します。
したがって、本番環境ビルドのデプロイに使用される既存のgh-pages
ブランチがある場合は、コンテンツのバックアップを別のブランチに作成して、必要に応じて簡単にロールバックできるようにしてください。
このページの残りの部分で使用するJekyllサイトは、最初は_config.yml
、index.md
ページ、およびGemfile
のみで構成されています。 内容はそれぞれ次のとおりです。
# _config.yml
title: "Jekyll Actions Demo"
---
---
Welcome to My Home Page
{% assign date = '2020-04-13T10:20:00Z' %}
- Original date - {{ date }}
- With timeago filter - {{ date | timeago }}
# Gemfile
source 'https://rubygems.org'
gem 'jekyll', '~> 4.0'
group :jekyll_plugins do
gem 'jekyll-timeago', '~> 0.13.1'
end
デモサイトでは、Jekyll 4とサードパーティプラグインを使用しています。どちらも現在はGitHub Pagesでの使用はホワイトリストに登録されていません。プラグインを使用すると、日付が今日からどれだけ遡っているかを示します。例えば 日付を2016-03-23T10:20:00Z
と指定し、現在の日付が2020-04-13T10:20:00Z
である場合、出力は4 years and 3 weeks ago
になります。
私たちが使用しているアクションは、Ruby gemと依存関係のインストールを処理します。これによりユーザーの設定がシンプルになりますが、古いバージョンのBundlerで生成された Gemfile.lock
もチェックインすると問題が発生する可能性があります。
Actionのセットアップ
GitHub Actionsは、ディレクトリパス.github/workflows
(先頭のドットに注意してください)内のYAMLファイルを使用してリポジトリに登録されます。 ここでは、簡単にするためにマーケットプレイスのJekyll Actionsを使用します。
GitHubインターフェースを使用するか、YAMLファイルをワークフローディレクトリパスに手動でプッシュすることで、ワークフローファイル、たとえばgithub-pages.yml
を作成します。 基本の内容は次のとおりです。
name: Build and deploy Jekyll site to GitHub Pages
on:
push:
branches:
- master
jobs:
github-pages:
runs-on: ubuntu-16.04
steps:
- uses: actions/checkout@v2
- uses: helaili/jekyll-action@2.0.1
env:
JEKYLL_PAT: ${{ secrets.JEKYLL_PAT }}
上記のワークフローは次のように説明できます:
master
ブランチのみに対してon.push条件を使用してビルドをトリガーします—これにより、アクションが他のブランチのプッシュでgh-pages
ブランチを上書きするのを防ぎます。- ジョブのnameがYAMLファイル名と一致します:
github-pages
- checkout actionは、リポジトリのクローンを作成します。
helaili/jekyll-action@2.0.0
を使用して、選択したactionとversion numberを指定します。これはビルドとデプロイを処理します。- 使用するアクションの秘密のenvironment variableへの参照を設定します。
JEKYLL_PAT
は個人アクセストークンであり、次のセクションで詳しく説明します。
on.push条件を使用する代わりに、on.scheduleパラメーターを使用してscheduleでビルドをトリガーできます。たとえば、ここではcrontab guruサイトでテストできるcron構文を指定して、毎日午前0時にビルドします。
on:
schedule:
- cron: '0 0 * * *'
アスタリスクが誤って評価されるのを防ぐために、この文字列は引用符で囲む必要があることに注意してください。
権限を与える
actionには、gh-pages
ブランチにプッシュする権限が必要です。そのため、GitHubプロファイルでGitHub authentication tokenを作成し、_Secrets_を使用してビルドで環境変数として設定する必要があります。
- GitHubプロファイルのDeveloper Settingsで、Personal Access Tokensセクションに移動します。
- トークンをCreateします。”GitHub Actions”のような名前を付け、
public_repos
(またはプライベートリポジトリのrepo
scope全体)への権限があることを確認します—アクションがgh-pages
ブランチにコミットするために必要です。 - トークンの値をコピーします。
- リポジトリの Settings へ行き、Secrets タブへ進みます。
JEKYLL_PAT
(重要)というトークンをCreateします。それに先ほどコピーした値を与えます。
ビルドとデプロイ
master
上のローカル変更をプッシュすると、actionがトリガーされビルドを開始します。
進行状況を確認してビルドエラーを確認するには、次のいずれかの方法でビルドのstatusを確認します。
- commitを見る
- GitHubのリポジトリレベルビューに移動します。最新のコミット(上部近く)の下で、コミットメッセージの横にチェックまたは_X_としてステータスシンボルが表示されます。カーソルを合わせて、detailsリンクをクリックします。
- Actionsタブ
- リポジトリのActions他部へ移動します。
jekyll
ワークフロータブをクリックします。
- リポジトリのActions他部へ移動します。
すべてがうまくいけば、全ステップが緑色になり、ビルドされたアセットがgh-pages
ブランチに存在するようになります。
ビルドが成功すると、GitHub Pagesはリポジトリのgh-pages
ブランチに保存されているサイトを公開します。actionがこれを処理するので、gh-pages
ブランチをセットアップしたり、GitHub Pagesを有効にする必要はありません。
(プライベートリポジトリの場合、有料プランにアップグレードする必要があります)
live siteを表示するには:
- リポジトリのenvironmentタブへ移動します。
- デプロイされたサイトのURLを見るためにView Deploymentをクリックします。
- そのURLでサイトを見ます。
timeago
フィルターが期待どおりに機能していることを確認します。 - 必要に応じて、このURLをリポジトリのメインページと
README.md
に追加して、人々が簡単に見つけられるようにします。
サイトをさらに変更する必要がある場合は、master
にコミットしてプッシュします。 ワークフローにより、サイトが再度ビルドとデプロイされます。
gh-pages
ブランチを直接編集しないでください。変更はActionからの次の正常なデプロイで失われます。
外部リンク
- jekyll-actionsはGitHub Marketplaceで利用可能なactionであり、このガイドで使用していました。
- jekyll-actions-quickstartは、
jekyll-actions
actionのライブデモを含む非公式リポジトリです。そのプロジェクトは、新しいサイトを作成するためのテンプレートとして使用できます。