利用 GitHub Actions 实现自动化部署 Hexo 到 Github Pages

距离上次写博客已经过去了 6 年, 最近计划重新开始写博客,所以把原来的 Hexo 项目老代码修整了下,搞了下部署。

创建 Hexo 项目

因为原来我的 Hexo 项目是大概 6 年前的版本了,在部署的时候遇到 Hexo 生成不了 html 的问题。所以选择重新安装最新版本的 Hexo,然后直接迁移 source 文件夹即可。

创建 Github 仓库

需要在 GitHub 建好两个仓库,为什么是两个?一个仓库也是可以的,直接参考Hexo 官方部署方案,流程简单很多。

我这里使用两个仓库目的主要是希望博客源码仓库私有化和 Github Pages 仓库分开管理,单纯个人喜好。所以后续部署会跟上面 Hexo 官方文档上部署方法有点不同。

  • Hexo 项目仓库
  • username.github.io 仓库
    • username 为 github 的账号名字。其他命名也是可以的,只是访问路径会变成 username.github.io/<仓库名>

创建个人访问令牌(Personal Access Token)

因为我们需要在 Hexo 项目仓库 执行 Github Actionsusername.github.io 仓库推送代码,由于 Github 权限限制,我们需要在 GitHub 账户中创建一个具有足够权限的个人访问令牌(Personal Access Token,简称 PAT)。这个令牌需要有足够的权限来修改仓库。

  1. 点击右上角头像 -> 打开 Settings -> 左边栏滚到最后找到 Develop Setting 打开,如图

    Developer Setting
  2. 找到 Personal Access Token 点击 Tokens(classic) -> 选择 Generate new token (classic) ,如图

personal-access-tokens
  1. 给令牌起个名字并且勾选红框中的 repo 的访问权限,然后点击生成 token注意: 确保复制并安全地保存这个令牌。GitHub 不会再次显示这个令牌,所以这是你唯一的机会复制它),如图
new-personal-access-token copy-token
  1. 将生成的 PAT 添加到你的博客源代码仓库的 Secrets,名字填入 PERSONAL_TOKEN 后面会用到这个变量名,如图
new-secret

创建 Github Actions 脚本

  1. 在你的 Hexo 项目根目录下创建一个 .github/workflows 文件夹(如果尚未存在)。

  2. 在该文件夹内创建一个新的 YAML 文件(例如 hexo-deploy.yml),用于定义 GitHub Actions 工作流。

  3. 复制如下配置到 YAML 文件

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
49
name: Deploy Hexo to GitHub Pages

on:
push:
branches:
- master # 或你使用的默认分支名称

jobs:
deploy:
runs-on: ubuntu-latest

steps:
- name: Checkout blog source
uses: actions/checkout@v2
with:
path: blog

- name: Set up Node.js
uses: actions/setup-node@v1
with:
node-version: "16" # 设置 Node.js 版本

- name: Cache dependencies
uses: actions/cache@v2
with:
path: node_modules
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-

- name: Install dependencies
run: npm install
working-directory: ./blog

- name: Install Hexo CLI
run: npm install -g hexo-cli
working-directory: ./blog

- name: Generate static pages
run: hexo generate
working-directory: ./blog

- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
personal_token: ${{ secrets.PERSONAL_TOKEN }}
publish_dir: ./blog/public
external_repository: username/username.github.io # 更改为你的 GitHub Pages 仓库, username 是你的用户名
publish_branch: main # GitHub Pages 分支
  1. 提交本地的 Hexo 项目代码到对应 Github 仓库即可触发 Github Actions 工作流实现自动部署,然后访问你的 username.github.io