LAPRAS アウトプットリレー (opens new window)の 2 日目の記事です。
このブログは GitHubActions で GitHub Pages にデプロイしています。今回はそのことについて書いていきます。
このブログは Public なリポジトリのnasum/blog (opens new window)と private なリポジトリの nasum/nasum.github.io で構築されています。Public なリポジトリのnasum/blog (opens new window)の GitHubActions のワークフローでから nasum/nasum.github.io への git push でデプロイを行っています。
普通は一つのリポジトリでやると思うのですが、LAPRAS のアウトプットで HTML のコード量だけ異常に増えたら嫌だなと思ってこうしています。
簡単に次のようなフローでデプロイを行っています。
git pushする(GitHubActions で実行GitHubActions の設定を見ていきます。次のような設定でデプロイフローを構築しています。
name: deploy
on:
push:
branches:
- master
jobs:
deploy:
runs-on: ubuntu-18.04
env:
GA: ${{ secrets.GA }}
steps:
- uses: actions/checkout@master
- name: package install
run: |
yarn install
- name: build
run: |
yarn run build
- name: commit file
run: |
cd docs/.vuepress/dist
echo ${{ secrets.DOMAIN }} > CNAME
git config --global user.email ${{ secrets.EMAIL }}
git config --global user.name ${{ secrets.NAME }}
git init
git add -A
git commit -m 'deploy'
- name: Push
uses: ad-m/github-push-action@master
with:
github_token: ${{ secrets.ACCESS_TOKEN}}
force: true
directory: ./docs/.vuepress/dist
repository: ${{ secrets.REPO_NAME }}
ポイントごとに見ていきます。
master への push の検知は次のように書きます。
on:
push:
branches:
- master
on ではワークフローをトリガする GitHub のイベントを指定できます。今回の場合だとmaster ブランチへの push を検知しワークフローを実行しています。
イベントは push だけでなく pull_request や定期的に実行する schedule もあったりします。詳しくはドキュメント (opens new window)を見るとよいです。
デプロイのワークフローは jobs に書いていきます。
runs-on でビルド環境の設定をします。 ubuntu を設定していますが、windows-latest や macos-latest を指定できます。指定できる環境もドキュメント (opens new window)に詳しく書かれています。
env ではビルド環境での環境変数を設定しています。自分のブログは GA でアクセス解析をしているのでビルド時に埋め込むために GA の ID を埋め込んでいます。
ここで secrets.GA と書いているのですが、これは GitHub のリポジトリの Settings にある Secrets から値を呼び出すコードです。Public なリポジトリの Secrets は Collaborator の権限を持つひとしかアクセスできないので Public なリポジトリで使っても大丈夫です(大丈夫なはず。見えちゃってたらこっそり教えてくれると嬉しい)。
そのあとの steps で具体的なデプロイプロセスを記述していきます。このあたりは CircleCI などと同じような感じで書くことができます。
GitHubActions ならではの機能として uses で他の Action を呼び出せるというのがあります。今回は master からチェックアウトしてくれる actions/checkout と、GitHub のリポジトリへ push してくれるad-m/github-push-action (opens new window) の2つを使用しています。
具体的なデプロイステップは
actions/checkout でプロジェクトのチェックアウトgit init add commit してデプロイの準備を整えるad-m/github-push-action で別のリポジトリに pushの順番に行います。このプロセスは VuePress のドキュメントにあったデプロイ方法 (opens new window)をそのまま GitHubActions に落とし込んだものです。
ad-m/github-push-action では with を使ってデプロイに必要な変数を埋め込んできます。ここではトークンや force push するかどうか、成果物のディレクトリなどを設定しています。
こうして設定したデプロイフローがうまく動くの GitHub で次のように実行され無事 blog の更新がなされます。

VuePress で作ったブログを GitHubActions でデプロイについて書いていきました。VuePress 公式のデプロイ方法をそのまま GitHubActions に落とし込むことで簡単にデプロイができるようになりました。
GitHubActions はまだ結構やれそうなことがたくさんあるので、例えばデプロイしたら Twitter で通知みたいなこともできそうなので今度はそれにチャレンジしたいと思います。