Automated deployment of hexo via github action

前言

每年都要折腾一下自己的博客,今年准备把所有的博客再次迁移到静态博客 Hexo 中,配合 Github Action 实现,只需要一个浏览器就可以自动部署博客。

思路

整体思路很简单,在你的 github-pages 的项目建立两个 分支 mastergh-pages,在 gh-pages 分支上完成 hexo 的构建,然后将构建后的静态网页推送到 master 分支上

其中在 github actions 涉及的主要 action 为 github-pages-deploy-action,参考说明文档,需要使用到 token 或者 ssh-key,这里我使用到是前者,获取 token 的方法可以参考 encrypted-secrets,然后在你的 github-pages 仓库 secrets 设置一下 token,命名为 ACCESS_TOKEN

脚本

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
50
51
52
name: Blog CI/CD

# 触发条件:在 push 到 gh-pages 分支后触发
on:
push:
branches:
- gh-pages

env:
TZ: Asia/Shanghai

jobs:
blog-cicd:
name: Hexo blog build & deploy
runs-on: macos-latest # 系统环境,可以自由设置

steps:
- name: Checkout codes
uses: actions/checkout@v2

- name: Setup node
# 设置 node.js 环境
uses: actions/setup-node@v1
with:
node-version: '12.x'

- name: Cache node modules
# 设置包缓存目录,避免每次下载
uses: actions/cache@v1
with:
path: ~/.npm
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}

- name: Install hexo dependencies
# 下载 hexo-cli 脚手架及相关安装包
run: |
npm install -g hexo-cli
npm install

- name: Generate files
# 编译 markdown 文件
run: |
hexo clean
hexo generate

- name: Deploy hexo blog
# 部署到 GitHub Pages
uses: JamesIves/github-pages-deploy-action@releases/v3
with:
ACCESS_TOKEN: ${{ secrets.ACCESS_TOKEN }}
BRANCH: master
FOLDER: public

这里略过了关于 hexo 的配置,如果对 hexo 的配置不太了解可以参考 hexo官网,到此,只要每次直接更新 gh-pages 就可以触发自动构建流程了。