Hexo 博客自动化部署

使用 Github Actions 自动化部署 Hexo 博客

2023.07.29 更新: 不使用原来的 Personal access tokens (classic),改用新版的 Fine-grained personal access tokens

环境信息:

1
2
3
4
hexo: 6.3.0
hexo-cli: 4.3.0
os: darwin 22.5.0 13.4.1
node: 20.3.0

前期准备

首先最基本的:

  1. 会用 Git 以及 Github (废话)
  2. 会用 Hexo 搭建博客 🤔
    • 头一次用 Hexo 也问题不大,官方文档写的很详细,照着操作就会了
    • 重点关注如何修改配置文件
      • _config.yml (hexo 配置文件: 看官方文档)
      • _config.xxxx.yml (xxxx主题的配置文件: 看对应主题的文档, 例如正在用的 NexT)

1. Github 创建仓库

Github 创建两个仓库:

  • 一个 Public 仓库
    • 用于存放build后的博客静态网页
    • 名称随意
      • 注意如果使用 用户名.github.io 为仓库名可以无需加仓库名路径访问
      • 如果仓库名为 blog, 则需要通过 用户名.github.io/blog 访问
      • 这里以 ex7l0it.github.io 为例
  • 一个 Private 仓库
    • 用来存放文章源码
    • 名称随意,以 blog-source 为例

实现目标是更新 Private 仓库数据时会使用 Github Actions 自动 build 博客内容并部署到指定的 Public 仓库中

2. 创建 Github Token

  • 如何创建?
    • 答: 看官方文档
    • 创建一个 Token, 用新的细粒度的 Fine-grained personal access tokens
    • Token name 内容随意, 自己知道用于自动化部署博客即可
    • Select scopes 部分选择 repoworkflow 权限
    • Repository access 选中 Only select repositories,选择公开仓库 ex7l0it.github.io
      • 仓库权限中给 ActionsContentsPages 分配 Read and write 权限就够
      • 无需账号权限
  • 注意
    • Token 创建完成后只显示一次, 及时复制
    • Token 有过期时间, 过期之后记得再次更新(当然这是后话)

3. 为 Private 仓库创建 secrets

  • 如何创建?
    • 答: 还是看官方文档
    • Name 还是随意, 这里以 DEPLOY_TOKEN 为例
    • Secret 内容填写上一步生成的 Token

4. 创建 Github Actions 配置文件

  1. 在 hexo 项目根目录的 .github 文件夹下创建一个名为 workflows 的文件夹
  2. 在刚刚创建的 workflows 文件夹下创建一个 .yml 类型文件,名称随意,这里以 deploy.yml 为例
  3. deploy.yml 内容大致如下:
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
name: Hexo Deploy GitHub Pages
on:
push:
branches:
# 只有当 master 分支进行 push 的时候执行下面的操作 (也就是当前Private仓库的分支)
- master
jobs:
build-and-deploy:
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@master

- name: Build and Deploy
uses: theme-keep/hexo-deploy-github-pages-action@master
env:
# 这里注意 DEPLOY_TOKEN 是上一步设置的 secrets 名称
PERSONAL_TOKEN: ${{ secrets.DEPLOY_TOKEN }}

# The repository the action should deploy to.
# 这里是部署的目标仓库, 格式是Github用户名/一开始创建的 public 仓库名
PUBLISH_REPOSITORY: ex7l0it/ex7l0it.github.io

# The branch the action should deploy to.
# 要部署到的 public 仓库的分支名
BRANCH: master

这里使用的是 theme-keep 团队创建的 https://github.com/theme-keep/hexo-deploy-github-pages-action 仓库中的内容,Hexo博客通用, 不局限主题 👍🏻👍🏻👍🏻

杂七杂八的话

  • 现在 Github 默认分支改成了main, 本人还是习惯用 master(可以在Github设置中更改默认分支名称)
  • 如果需要将本地的 main 分支改名为 master 分支, 执行 git branch -m main master 即可

5. 完成

  • 将 hexo 项目 push 到 Private 仓库即可触发自动化部署,可以在仓库的 Actions 页面看到 Workflows 的工作状态
  • Public 仓库中通过 Github Pages 访问即可

6. 其他的好东西