使用Github Actions自动部署Hexo

本文最后更新于:2022年4月15日 下午

前言

之前博客一直用的都是Jekyll框架,在使用Github Pages进行部署的时候并不需要自己手动配置,不过在换了Hexo主题之后,每次写完了博客除了要push一次commit到博客的内容分支上,还需要自己手动deploy一次。虽然也不会很麻烦,不过用Github Actions来完成这个过程也要更顺畅一些。原本觉得这个需求应该很简单,直接在Actions上执行一次hexo g -d的指令就好,结果因为GithubHTTPS上对Token的验证,以及Hexo自带的one-command-deployment存在BUG,折腾到凌晨两三点才发现,并且通过issues里面提供的修改链接使用oauth进行url验证的方法还是失败了,最后花了半小时改成了ssh密钥验证很轻松就完成了。。下面为对HexoActions的脚本的一个备份

脚本备份

配置文件

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

on:
push:
branches:
- hexo

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/[email protected]
with:
ref: hexo

# Caching dependencies to speed up workflows. (GitHub will remove any cache entries that have not been accessed in over 7 days.)
- name: Cache node modules
uses: actions/[email protected]
id: cache
with:
path: node_modules
key: ${{ runner.os }}-node-v2-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-v2

- name: Install Dependencies
if: steps.cache.outputs.cache-hit != 'true'
run: |
npm ci

# Deploy hexo blog website.
- name: Build and Deploy
run: |
mkdir -p ~/.ssh/
echo "${{ secrets.DEPLOY_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
git config --global user.email "[email protected]"
git config --global user.name "HalcyonAzure"
npx hexo g -d
rm -rf ~/.ssh/id_rsa

整个脚本大致流程为

  1. 检测到hexo的内容分支有push之后,checkout到内容分支。

  2. 判断是否有nodejsmodules缓存。

    • 如果检测到有效缓存则跳过安装步骤,直接进行下一步。
    • 如果没有检测到有效缓存则对模块进行部署
  3. 创建id_rsa密钥文件,并将仓库中DEPLOY_KEYsecret写入密钥文件,并且配置github.com的信任和全局帐号邮箱

  4. hexo进行generate & deploy操作

  5. 删除写入的密钥文件