用 GitHub Actions 实现自动部署流程:我的博客是怎么部署的

用 GitHub Actions 实现自动部署流程:我的博客是怎么部署的

过去我用 Hexo 写博客,每次更新都要本地执行 hexo g && hexo d,手动 push 到两个仓库(一个是源码,一个是部署)。虽然操作不复杂,但每次更新都要打开终端,稍微有点麻烦。后来,我用 GitHub Actions 搭了一套自动部署流程,只需要在 Qexo 面板里发布文章,博客页面就能自动更新,省心不少。

这篇文章就记录一下我整个部署流程的设置,主要包括:

  • 仓库结构规划
  • Actions 配置流程
  • 实践中的注意事项和坑

1. 仓库结构

我把博客分成两个 GitHub 仓库:

  • hexo-source:存放 Hexo 源码(markdown、主题等)
  • hexo-blog:部署仓库,用来托管生成后的静态页面(GitHub Pages)

这样一来,源码和部署内容隔离,部署仓库是纯 HTML,可以直接作为 GitHub Pages 的目标。


2. 编写 GitHub Actions 流程

hexo-source 仓库中,创建 .github/workflows/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
28
29
30
31
32
33
34
35
36
37
38
39
40
name: Deploy Hexo Blog

on:
push:
branches: [main]

jobs:
build-and-deploy:
runs-on: ubuntu-latest

steps:
- name: Clone source
uses: actions/checkout@v3

- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: 18

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

- name: Install Dependencies
run: npm install

- name: Generate Static Files
run: npx hexo generate

- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./public
publish_branch: main # 部署仓库的默认分支
external_repository: your-username/hexo-blog

其中 external_repository 需要替换成你的部署仓库名。


3. 部署仓库设置

你的 hexo-blog 仓库需要:

  • 设置默认分支为 main(或你设定的其他部署分支)
  • 开启 GitHub Pages,指定来源为 main 分支根目录

4. 实际效果

现在,当我在 hexo-source 仓库的 main 分支 push 文章更新时:

  1. GitHub Actions 会自动拉取代码
  2. 安装依赖并执行 hexo generate
  3. 自动将 public 目录内容发布到 hexo-blog

整个过程不需要我本地操作,基本等同于运行了 hexo g && hexo d 并 push 到部署仓库。


5. 注意事项和小建议

  • 🔒 不要把 node_modules.deploy_git 目录提交进源码仓库
  • ✅ 安装 Hexo 推荐用 npx hexo 而不是全局安装
  • ⚠️ deploy.yml 中路径、分支名要严格对应
  • 🔄 可以结合 Qexo 或其他写作平台,用 Webhook 触发 Actions 更新
  • 💬 日志调试很重要,Actions 执行失败要及时查看具体错误

6. 小结

从手动部署到全自动部署,虽然配置过程有点繁琐,但一旦跑通之后非常省心。对于像我这样喜欢写点东西,又不想每次都手动部署的人来说,GitHub Actions 的 CI/CD 能力就是刚需。

你可以参考这套方式部署自己的博客,或者按需修改适配其他静态站点生成器(如 Hugo、VuePress、Astro 等)。