用 Github Actions 自动部署 Hexo 博客

背景

在配置 Hexo 和写博客的过程中,每次发布博客都要提交变更、hexo clean 和 hexo depoly,步骤实在是太繁琐。有没有一种方式可以实现自动化地部署博客呢?答案是有的。当前市面上有关自动化部署的工具确实不少,像常用的 jinkens、travis、circleci 和 GitHub Actions 等。

这里我就用 GitHub Actions 吧,毕竟博客是托管在 GitHub 上的,一套流程走下来也是方便的很。

Hexo

首先我们需要确保在本地已经安装了 hexo-cli,安装方式参见 官网

其次,我们要在 GitHub 上部署 pages,参考 这里

打开 Hexo 的配置文件 _config.yml,确保配置文件中有以下配置:

1
2
3
4
deploy:
type: git
repository: git@github.com:smpower/smpower.github.io.git
branch: master

这里解释一下,上面配置的意思是使用 hexo-deployer-git 插件将 Hexo 生成的静态网站资源提交到 repository 仓库的 master 分支上。当我们访问博客的时候,实际上就是访问的这个分支的静态资源。

注意:请将 repository 改为你自己的仓库地址,并且将 branch 修改为你的 gh-pages 分支。

生成密钥

这里我们生成的密钥是用在仓库中的。

1
ssh-keygen -t rsa -b 4096 -C "Hexo Deploy Key" -f github-deploy-key-hi-ruofei-com -N ""

这会在当前目录下生成两个文件:

  • github-deploy-key-hi-ruofei-com —— 私钥
  • github-deploy-key-hi-ruofei-com.pub —— 公钥

Github 配置密钥

我们把 私钥 放在我们存放 Hexo 原始文件代码的仓库里面,用来触发 Actions 使用。

公钥 放在 GitHub pages 对应的仓库里面,用于 Hexo 部署时的写入操作。

配置私钥

首先在 GitHub 上打开保存 Hexo 原始代码的仓库,访问 Settings -> Secrets,页面如下:

然后点击 New repository secret:

Name 处填写 HEXO_DEPLOY_KEY_HI_RUOFEI_COM,注意大小写,这个后面的 GitHub Actions Workflow 要用到,一定不能写错。

Value 处填写 github-deploy-key-hi-ruofei-com 中的内容:


添加了私钥以后的页面如下:

配置公钥

接下来我们需要访问存放网页的仓库,也就是 Hexo 部署以后的仓库,比如:yourname.github.io 这种,访问 Settings -> Deploy keys:

点击 Add deploy key 按钮来添加一个新的公钥:

在 Title 中输入:HEXO_DEPLOY_PUB_HI_RUOFEI_COM 字样,当然也可以填写其它自定义的名字。

在 Key 中粘贴 github-deploy-key-hi-ruofei-com.pub 文件的内容。

注意:一定要勾选 Allow write access 来打开写权限,否则无法写入会导致部署失败。

最后添加好了公钥的界面如下:

创建 Workflow

首先在 Hexo 的仓库中创建一个新文件:.github/workflows/deploy.yml,文件名可以自己取,但是一定要放在 .github/workflows 目录中,文件的内容如下:

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
name: Hexo Deploy

on:
push:
branches:
- master

jobs:
build:
runs-on: ubuntu-18.04
if: github.event.repository.owner.id == github.event.sender.id

steps:
- name: Checkout source
uses: actions/checkout@v2
with:
ref: hexo # 这是你的 Hexo 源文件所在的分支

- name: Setup Node.js
uses: actions/setup-node@v1
with:
node-version: "14.x"

- name: Setup Hexo
env:
ACTION_DEPLOY_KEY: ${{ secrets.HEXO_DEPLOY_KEY_HI_RUOFEI_COM }}
run: |
mkdir -p ~/.ssh/
echo "$ACTION_DEPLOY_KEY" > ~/.ssh/id_rsa
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
git config --global user.email "contact@mail.ruofei.site"
git config --global user.name "ruofei"
npm install hexo-cli yarn -g
yarn

- name: Deploy
run: |
hexo clean
hexo deploy

简单解释一下,当我们推送内容到远程 hexo 分支的时候,就会触发这个 Workflow。

使用 Ubuntu 18.04 作为 hexo deploy 的系统。

首先 checkout 源代码(在 hexo 分支),然后设置使用最新的 Node.js v14.x LTS 作为 node 解释器。

接下来就是创建 SSH 相关的配置文件,注意 secrets.HEXO_DEPLOY_KEY_HI_RUOFEI_COM 就是对应我们之前设置的私钥,所以名字一定不要搞错。

git config 相关的名字和邮件地址替换成大家自己使用的就好了。

最后就是安装 Hexo CLI,各个依赖模块和部署了。

验证

下面就是 GitHub Actions 页面显示的运行结果:

前面有绿色钩钩的,就表示部署成功,红色叉叉的表示失败。如果部署失败,还会收到 GitHub 的邮件提醒。

好了,以上就是利用 GitHub Actions 自动部署 Hexo 到 GitHub Pages 的方法,有疑问的请在下方留言哦 😊