前言

本文仅介绍用 GitHub Actions 自动部署 Hexo 到 GitHub Pages。且假设你目前是用本地用 Hexo 把博客发布到 GitHub Pages 的。

正常的,我们创建、修改一篇博文需要经历以下步骤:

  1. 在博客根目录 hexo new '文章名'
  2. 找到 .md 文件打开编辑
  3. 发布 hexo clean,hexo g,hexo d

而且上传的是渲染好的博客,源文档还在本地,如果异地编辑还不方便。

多地同步请参考(请先看完):HEXO 多地同步,然后你会知道如何将源文件上传到 GitHub 仓库。

本文将教你如何配置 GitHub Actions 实现在本地上传源文件后自动部署到 GitHub Pages。注意,这个 Action 针对的是存放 Hexo 源文件和网站文件分开存放的场景。

改 _config.yml

如果你的 _config.yml 以前是这样配置的:

1
2
3
4
deploy:
type: git
repo: https://github.com/用户名/仓库名.git
branch: master

请将 repo 改成 ssh 格式:

1
2
3
4
deploy:
type: git
repo: [email protected]:用户名/仓库名.git
branch: master

配置 ssh 密匙

生成 SSH Key,运行命令:

1
ssh-keygen -t rsa -b 4096 -C "Hexo Deploy Key" -f github-deploy-key

会在当前目录生成两个文件,github-deploy-key 为私钥,github-deploy-key.pub 为公钥。

私钥存放在 Hexo 源文件的仓库里:

  1. 进入 Hexo 源文件的 GitHub 仓库
  2. Setting -> Secrets -> New secret
  3. Name 填 HEXO_DEPLOY_KEY 注意大小写,不要拼错
  4. Value 填 github-deploy-key(私钥)中的内容

公钥放到 GitHub Pages 对应的仓库里:

  1. 进入 GitHub Pages 对应的仓库
  2. Settings -> Deploy keys -> Add deploy key
  3. Title 填 HEXO_DEPLOY_PUB (可以自定义)
  4. Key 填 github-deploy-key.pub(公钥)中的内容
  5. Allow write access 务必勾上

创建 workflow

在私人仓库(Hexo 源文件)里点 Actions,创建一个文件 .github/workflows/deploy.ymldeploy 这个名可以改,但路径不能动。

内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
name: Hexo Deploy

on:
push:
branches:
- master # 源文件仓库分支名,可能是 main / master 或者你自定的

jobs:
build:
runs-on: ubuntu-latest
if: github.event.repository.owner.id == github.event.sender.id

steps:
- name: Checkout source
uses: actions/checkout@v2
with:
ref: master # 源文件仓库分支名


- name: Setup Node.js
uses: actions/setup-node@v2
with:
node-version: "14.x"

- name: Setup Hexo Dependencies
run: |
npm install hexo-cli -g
npm install --save

- name: Setup Deploy Private Key
env:
ACTION_DEPLOY_KEY: ${{ secrets.HEXO_DEPLOY_KEY }}
run: |
mkdir -p ~/.ssh/
echo "$ACTION_DEPLOY_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts

- name: Setup Git Infomation # [email protected]、yourusername 改成你的 邮箱、用户名
run: |
git config --global user.email '[email protected]'
git config --global user.name 'yourusername'

- name: Deploy Hexo
run: |
hexo clean
hexo generate
hexo deploy

注意:仔细看注释,你需要填写自己的邮箱、用户名。你可能还要修改分支名(把文件中的 master 换成仓库默认分支)。

最后

只要在本地将源文件 git push,GitHub Actions 就会自动部署了。若有错误可以到 GitHub 仓库里 Actions 中查看报错。