GitHub Actions自动部署Hexo博客

以前使用 Travis CI 自动部署Hexo博客,但是,Travis CI 免费账户的速度不算太快。这次,使用 Github 自带的Actions功能,实现自动部署。实测后部署速度的确更快。

GitHub Actions 由 GitHub 官方推出的工作流工具。典型的应用场景应该是 CI/CD,类似 Travis 的用法。

项目背景

我的博客源码和静态文件存放在一个 github 项目中的两个独立分支。

分支 说明
hexo 原始数据及配置
master 静态页面

项目设置

生成密钥对

1
ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -N "" -f deploy_key

会生成 deploy_key私钥 和 deploy_key.pub公钥两个文件。

添加公钥

项目页 --> Settings --> Deploy keys --> Add deploy key

deploy_key.pub公钥内容复制上去,勾选:Allow write access

添加加密环境变量

项目页 --> Settings --> Secrets --> Add a new secret

环境变量名可以任意命名,但要和Actions里的设定$对应

环境变量 说明
DEPLOY_KEY 发布key 私钥,deploy_key私钥文件内容
EMAIL 发布用户邮箱账号
NAME 发布用户名

修改_config.yml

1
2
3
4
5
6
7
# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
type: git
repo: git@github.com:maboloshi/Blog.git
branch: master
message: "Github CI Auto Builder at {{ now('YYYY-MM-DD HH:mm:ss Z') }}"

repo链接必须使用 ssh 格式

编写 Action 脚本

此处使用成熟方案

在根目录下创建 GitHub Actions workflow 文件,.github/workflows/hexo.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
name: Hexo CICD

on: # 监视 `hexo`分支
push:
branches:
- hexo

jobs:
build:
runs-on: ubuntu-latest
if: "!contains(github.event.head_commit.message, '[ci skip]')"
steps:
- name: Checkout
uses: actions/checkout@v1
with:
submodules: true
- name: Cache node modules
uses: actions/cache@v1
with:
path: node_modules
key: ${{runner.OS}}-${{hashFiles('**/package-lock.json')}}
- uses: yrpang/github-actions-hexo@master
with:
deploykey: ${{secrets.DEPLOY_KEY}}
username: ${{secrets.NAME}}
email: ${{secrets.EMAIL}}

注意:

  1. 根目录下.gitignore中需要移除package-lock.json
  2. 静态页面是强制推送,覆盖历史数据

小结

GitHub Actions将自动监视hexo分支,并对任何除带[ci skip]的 push 触发执行。

参考