必要性

主要为了以下两点:

  1. 简化博客发布的步骤;
  2. 备份博客源码和帖子源文件。

配置步骤

仓库

这里参考了很多帖子,并考虑到github的私有仓库不免费提供github pages,最后决定建两个仓库,一个是公有的博客静态文件仓库wrenxr.github.io,用于存储静态文件并且发布github pages,另一个是私有的的hexo源码仓库wrenxr.githhub.io-hexo-src,用于备份博客源码。

秘钥

1. 生成秘钥

输入下面的命令,生成一个专门的秘钥用来部署hexo。

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

命令执行成功后会在当前目录下生成两个文件:

  • 私钥:github-deploy-key
  • 公钥:github-deploy-key.pub

2. 在库中设置秘钥

私钥放到hexo源码仓库,用于触发github action;把公钥放到静态文件仓库,用于hexo部署时的写入工作。

配置私钥

image

配置公钥

image-1

创建工作流

在hexo源码仓库中,新建.github\workflows\pages.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
name: Hexo Deploy

on:
push:
branches:
- main

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

steps:
- name: Checkout source
uses: actions/checkout@v3
with:
ref: main
submodules: true # 拷贝主题文件子模块

# 设置更新消息的时区
- name: Set up timezone
run: sudo timedatectl set-timezone 'Asia/Shanghai'

- name: Echo current time
run: timedatectl

# 设置为本机的node.js版本
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18.18.0'

- name: Setup Hexo
env:
# 上一步配置的私钥
ACTION_DEPLOY_KEY: ${{ secrets.HEXO_DEPLOY_KEY }}
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 "2694813115@qq.com"
git config --global user.name "wrenxr"
npm install hexo-cli -g
npm install

- name: Deploy
run: |
hexo clean
hexo generate
hexo deploy

验证结果

hexo源码仓库的Action执行成功:

image-2

并且静态文件仓库也实时更新:
image-3

问题总结

  1. 搞清楚两个仓库分别用来干什么的,公钥和私钥分别是干什么的,各自在哪里配置,一开始没搞明白,来回绕了很多圈子;

  2. 在自动化部署成功之后,发现部署到线上的页面一片空白,查看静态文件仓库,发现所有的index.html文件都是空白的0KB。如果是node版本和hexo版本冲突导致的话,本地也应该是空白的,但当时我本地是正常显示,部署上去却是空白的,所以只可能是自动部署中生成静态文件的步骤出了文件,查看Action执行日志发现如下信息:

image-4

好像是因为我没有正确配置项目子模块的仓库地址,根据提示,在项目根目录下创建了.gitmodules文件

1
2
3
4
[submodule "butterfly"]
path = themes/butterfly
url = https://github.com/jerryc127/hexo-theme-butterfly.git
branch = dev

配置好主题子模块的仓库地址,用于自动部署时拉取代码,重新启动后博客正常显示。

参考链接