Docusaurus 配置 GitHub Action 自动发布

Alan

Alan

Maintainer of blog

原文 - Deploying to GitHub Pages

记录一下我是如何利用 GitHub Action,自动发布我的 Docusaurus(以下简称Doc) 博客的。

Git 仓库结构#

我的 Doc 源码是在仓库alanwei43/blogmaster 分支,源码发布后的静态站点,也就是GitHub Page所在仓库是 alanwei43/alanwei43.github.io,GitHub Page使用 master 分支。

配置仓库#

首先需要配置 alanwei43/blog 仓库的认证。

  1. 生成一对 SSH Key(如果你的系统安装了SSH,可以执行ssh-keygen生成。因为我是Mac,之前生成过,所以直接使用 ~/.ssh 目录下的SSH Key。)
  2. 访问仓库 alanwei43/alanwei43.github.io,依次进入到仓库的 Settings > Deploy keys,然后将第一步生成的公钥 id_rsa.pub 添加进去。(添加key的时候需要勾选 Allow write access。)
  3. 访问仓库 alanwei43/blog,依次进入到仓库的 Settings > Secrets,然后将第一步生成的私钥 id_rsa 添加进去,名称填写 GH_PAGES_DEPLOY
note

我实际操作中并没有执行第2步,因为我之前已经把Mac上的 id_rsa.pub 添加到我GitHub账号(Account settings > SSH and GPG keys)里了, 然后使用我Mac上的私有SSH可以(id_rsa)操作我GitHub账号下的所有仓库.

创建 Workflow 文件#

alanwei43/blog 项目根目录创建文件 .github/workflows/documentation.yml

.github/workflows/documentation.yml
name: documentation
on:
pull_request:
branches: [master]
push:
branches: [master] # 这里表示当 alanwei43/blog 的分支 master 有push代码是执行以下job
jobs:
checks:
if: github.event_name != 'push'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions/setup-node@v1
with:
node-version: '12.x'
- name: Test Build
run: |
if [ -e yarn.lock ]; then
yarn install --frozen-lockfile
elif [ -e package-lock.json ]; then
npm ci
else
npm i
fi
npm run build
gh-release:
if: github.event_name != 'pull_request'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions/setup-node@v1
with:
node-version: '12.x'
- uses: webfactory/ssh-agent@v0.5.0
with:
ssh-private-key: ${{ secrets.GH_PAGES_DEPLOY }}
- name: Release to GitHub Pages
env:
USE_SSH: true # 这里配置成使用SSH认证,会用到上面配置的 deploy key 和 secret
GIT_USER: git
DEPLOYMENT_BRANCH: master # 这里指的是 alanwei43/alanwei43.github.io 仓库的 GitHub Page 使用的分支名
run: |
git config --global user.email "actions@github.com"
git config --global user.name "gh-actions"
if [ -e yarn.lock ]; then
yarn install --frozen-lockfile
elif [ -e package-lock.json ]; then
npm ci
else
npm i
fi
npm run deploy