使用 GitHub Action 自动部署 Hexo 博客

偷懒是人类的第一生产力

介绍

Github Actions 可以很方便实现 CI/CD 工作流,来帮我们完成一些工作,比如实现自动化测试、打包、部署等操作。本文将介绍利用 Github Actions 实现自动部署 hexo 到 Github Pages。

使用传统的方法,我们需要在本地电脑上安装 hexo 环境,写完文章执行相关命令进行部署。

有时候为了简单博文内容,但手头的设备上没有 hexo 的环境,这时候就可以借助 GitHub Actions 来实现云端部署。

创建所需仓库

  • 创建 blog 仓库用来存放 Hexo 博文的 Markdown 源文件和配置文件(主题、站点等)
  • 创建 username.github.io 仓库用来存放静态博客页面

生成部署密钥

1
ssh-keygen -f github-deploy-key

当前目录将生成 github-deploy-keygithub-deploy-key.pub 两个文件。

配置部署密钥

  1. 复制 github-deploy-key 文件内容,在 blog 仓库 Settings -> Secrets -> Add a new secret 页面上添加。
  • Name 输入框填写 HEXO_DEPLOY_PRI
  • Value 输入框填写 github-deploy-key 文件内容。
  1. 复制 github-deploy-key.pub 文件内容,在 username.github.io 仓库 Settings -> Deploy keys -> Add deploy key 页面上添加。
  • Title 输入框填写 HEXO_DEPLOY_PUB
  • Key 输入框填写 github-deploy-key.pub 文件内容。
  • 勾选 Allow write access 选项。

编写 Github Actions

Workflow 模版

blog 仓库根目录下创建 .github/workflows/deploy.yml 文件。

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
name: CI

on:
push:
branches:
- main

env:
GIT_USER: dslwind
GIT_EMAIL: dslmuwind@gmail.com
THEME_REPO: theme-next/hexo-theme-next
THEME_BRANCH: master
DEPLOY_REPO: dslwind/dslwind.github.io
DEPLOY_BRANCH: master

jobs:
build:
name: Build on node ${{ matrix.node_version }} and ${{ matrix.os }}
runs-on: ubuntu-latest
strategy:
matrix:
os: [ubuntu-latest]
node_version: [12.x]

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

- name: Checkout theme repo
uses: actions/checkout@v2
with:
repository: ${{ env.THEME_REPO }}
ref: ${{ env.THEME_BRANCH }}
path: themes/next

- name: Checkout deploy repo
uses: actions/checkout@v2
with:
repository: ${{ env.DEPLOY_REPO }}
ref: ${{ env.DEPLOY_BRANCH }}
path: .deploy_git

- name: Use Node.js ${{ matrix.node_version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node_version }}

- name: Configuration environment
env:
HEXO_DEPLOY_PRI: ${{secrets.HEXO_DEPLOY_PRI}}
run: |
sudo timedatectl set-timezone "Asia/Shanghai"
mkdir -p ~/.ssh/
echo "$HEXO_DEPLOY_PRI" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
git config --global user.name $GIT_USER
git config --global user.email $GIT_EMAIL
cp post.styl themes/next/source/css/_common/components/post/post.styl

- name: Install dependencies
run: |
npm install

- name: Deploy hexo
run: |
npm run deploy

配置文件

source 目录下新建_data文件夹,将 next 主题的配置文件复制到此目录并重命名为next.yml,并将配置的 override 属性修改为 true;另外需要修改行内代码颜色,同时将themes/next/source/css/_common/components/post/post.styl复制到项目根目录下。

另外,为了能在云端成功部署,需要把传统方法生成的 package.json、站点配置文件_config.ymlsource文件夹复制到blog仓库

参考

利用 Github Actions 自动部署 Hexo 博客
GitHub Actions 自动部署 Hexo
NexT 主题数据文件