通过Github Actions自动部署Hexo

终于调试成功了通过Github Actions自动部署Hexo。说真的,非程序员玩儿Github就是各种坑坑坑,有时候都被自己坑笑了。

整个过程参考了 此文 ,总结一下吧:

  1. 没啥必要用现成的脚本,反正 Hexo 只要npm部署一下,g一下d一下就可以了。用复杂的脚本不知道别人在干嘛更麻烦。
  2. 生成一对RSA秘钥,私钥丢在repo的secret里面,命名一个字段在代码中引用,公钥添加进github.io pubilc目录的deploykey里。
  3. 因为我龟毛的不想把hexo 代码放在public库,所以没有像常规方案一样一个public分支一个dev分支,而是private库里单独放代码,发布到github.io的公开库。故引入了hexo-deployer-git做发布,而不能通用于大部分的脚本。
  4. 一开始调试不过跟着报错信息一步步整github验证,RSA秘钥匹配就行,一个大坑是用的主题是直接git clone到本地的,不包含在提交到代码库内,故一直发布中提示「no layout」。在引文中也提到如何处理,我是简单粗暴的把主题下的「.git」目录整个删了
  5. 由于hexo-deployer-git使用的「.deploy_git」目录记录pubilc变更历史同样不会被推送到代码库,要么使用git submodule的方式管理(但如何同步又是个问题)要么才用下面提到的方式管理,参考文章

最终代码如下:

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
on: push
jobs:
build:
runs-on: macOS-latest

steps:
- uses: actions/checkout@v1
- name: Use Node.js 10.x
uses: actions/setup-node@v1
with:
node-version: "10.x"

- name: Setup Hexo env
env:
ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }}
run: |
# set up private key for deploy
mkdir -p ~/.ssh/
echo "$ACTIONS_DEPLOY_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
# set git infomation
git config --global user.name 'yourname'
git config --global user.email 'yourname@gmail.com'

# install dependencies
export TZ='Asia/Shanghai'
npm i -g hexo-cli
npm i
npm install hexo-deployer-git --save
npm install hexo-generator-search-zip --save
- name: Deploy
run: |
hexo generate
# 解决 commit 清空问题
git clone https://github.com/yourname/yourname.github.io .deploy_git
cd .deploy_git
git checkout master
cd ../
# generate and depoly
hexo deploy

效果就是现在只需要写完md了push上去,就可以自动deploy。本地的node.js环境都可以暂时省略,更拯救了我这个经常几个月都不commit一次的人。
Fin.