原文 - Deploying to GitHub Pages
记录一下我是如何利用 GitHub Action,自动发布我的 Docusaurus(以下简称Doc) 博客的。
Git 仓库结构
我的 Doc 源码是在仓库alanwei43/blog
的 master
分支,源码发布后的静态站点,也就是GitHub Page所在仓库是 alanwei43/alanwei43.github.io
,GitHub Page使用 master 分支。
配置仓库
首先需要配置 alanwei43/blog
仓库的认证。
- 生成一对 SSH Key(如果你的系统安装了SSH,可以执行
ssh-keygen
生成。因为我是Mac,之前生成过,所以直接使用 ~/.ssh 目录下的SSH Key。) - 访问仓库
alanwei43/alanwei43.github.io
,依次进入到仓库的 Settings > Deploy keys,然后将第一步生成的公钥 id_rsa.pub 添加进去。(添加key的时候需要勾选 Allow write access。) - 访问仓库
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