Hexo-GitHub Actions 自动部署

突然想捡起来,把Hexo的东西整整,CI的自动部署关掉了,重新用GitHub的action来进行自动部署;

首先

你需要知道Hexo部署的正常逻辑;

graph LR;
    a(本地源码更新)-->b(HexoGenerate);
    b-->c(生成静态文件);
    c-->d(HexoDeploy);
    d-->e(push到Github仓库)

大致逻辑上如上图所示,在Github仓库展示的(一般仓库名都是xxxx.orangeshinee.github.io)只是静态文件,不包含本地的源码,类似Themes主题文件等配置;

而我们需要做的,就是把本地源码和最后要生成展示的静态文件分开保存,同时备份,这样在你更换电脑或者换了生产环境的时候,可以随时把源码pull下来继续更改,不用担心丢失问题;

那么

Github Action是如何工作的?能解决什么问题?
简单来说,就是能够监控你源码的更改状态,如果你的源码有更改,那么GA就会在线上帮你进行Hexo GenerateHexo Deploy工作,不需要自己再手动部署;
同时,也分离了源码及静态文件,方便我们随时随地写文档;

graph LR;
    a(本地源码更新);
    z-->a;
    a-->z(源码仓库);
    b(HexoGenerate);
    a-->f(GitAction监控);
    f-->b;
    b-->c(生成静态文件);
    c-->d(HexoDeploy);
    d-->e(push到Github仓库)

然后

1.新建仓库

假设你已经在本地部署过了,那么你的网站仓库已经有了;
接下来,我们新建一个仓库,把本地的源码上传上去,同时将这个仓库的属性改为个人可见(这步可选);

2.SSH配置

在本地打开git bash,然后运行
ssh-keygen -t ed25519 -C "[email protected]" -f ~/.ssh/hexo_key
会在本地生成一对公钥&密钥,公钥就是后缀为.pub的文件;
如果你是windows电脑,那么配置文件会在c://users/YourName/.ssh/文件夹中;

公钥部署

右键用记事本先打开公钥,即后缀.pub的文件,复制;
打开静态文件仓库(xxxxx.github.io),点击设置,将公钥粘贴进去;
公钥部署

私钥部署

同上,我们将私钥的文本内容复制,部署到源码仓库
这里的位置与公钥不一样,私钥部署是在SecretsActions中,点击右上角添加私钥;
需要注意名称,我们将私钥名称设置为DEPLOY_KEY(也可以是其他名字),在后续步骤会用到;
私钥部署

3.新建Action

然后转到Actions设置,点击New workflow新建一个工作流,会生成一个xxx.yml的文件,名字可随意;

Actions设置

4.编辑配置文件

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
# name为名称,可随意
name: HexoDeploy
# 触发条件,这里只要你对仓库进行push,就会运行
on: [push]

jobs:
pages:
# 运行环境,即Action的运行环境,我们默认选ubuntu,详情见(https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#choosing-github-hosted-runners)
runs-on: ubuntu-latest
# steps是步骤,我们总共进行了6步,需要更改的只有ssh配置那一步
steps:
# 第一步,拉取你的源码,注意ref那里是不是你的仓库分支
- name: Checkout
uses: actions/checkout@v2
with:
ref: main

# 更新node环境,这里要注意,node版本要和你的hexo适配,过高可能会有问题;
# 可以在本地运行hexo -v,就能看到node版本
- name: Use Node.js 12.14.0
uses: actions/setup-node@v2
with:
node-version: "12"

# 更新包及缓存
- name: Cache NPM Dependencies
uses: actions/cache@v2
with:
path: node_modules
key: ${{ runner.OS }}-npm-cache
restore-keys: |
${{ runner.OS }}-npm-cache

# 增加SSH KEY的配置
- name: Add SSH Private Key
env:
# 这里的DEPLOY_KEY就是上文进行添加的
SSH_PRIVATE: ${{ secrets.DEPLOY_KEY }}
run: |
mkdir -p ~/.ssh/
echo "$SSH_PRIVATE" > ~/.ssh/id_rsa
chmod 700 -R ~/.ssh
ssh-keyscan github.com >> ~/.ssh/known_hosts
git config --global user.email "你的邮箱"
git config --global user.name "你的名称"

# 安装包
- name: Install Dependencies
run: |
npm install hexo-cli -g
npm install

# 部署
- name: Hexo Deploy
run: |
hexo clean
hexo deploy

编辑完成后保存;

5.没病走两步

上述增加Actions的步骤是在Github网站进行的,你也可以在本地进行,就是在仓库根目录新建一个.github文件夹,然后在里面新建一个workflows文件夹,然后将xxx.yml文件放入;

在本地更新一个文档,然后进行push;

此时Actions页面会自动运行一个任务,点进去可以看到详情;
黄色代表运行中,绿色代表部署成功,红色表示部署失败;

Action运行界面

一些坑

  • Node.js的版本问题,这个前面说过了,建议与本地的版本一致;
  • Hexo的版本问题,如果你的版本过低,有些配置会进行更改导致不再生效,需要用新的配置;
    例如我这里的Deprecated config detected: "external_link" with a Boolean value is deprecated. See https://hexo.io/docs/configuration for more details.,就是指external_link的配置已经不再使用了,转为用external_link.enable: true这种配置;
  • SSH的部署问题,如果发现部署失败,里面提到`[email protected]: Permission denied (publickey).`类似的,多半是因为私钥或者公钥没有部署好导致的,可以仔细看看上面的步骤;

AND

以上,完成了自动部署的整体工作,自己也大概了解了action的逻辑,后面就可以少折腾了;


参考:

  1. GitHub Actions 快速入门 - GitHub Docs
  2. 在 GitHub Pages 上部署 Hexo
  3. Hexo最速CICD部署,GitHub Actions!【最速攻略】