github action 自动部署 hexo

githuab 出 action 功能已经很久了,但是我一般写代码都不写测试用例,一直也就没用上,最近一段时间天天写博客,每次发表都要分别更新 blog 源码仓库和 github page 仓库源码。用上 github action,只要 push 到 blog 源码仓库,就会触发 action 中的 push 钩子更新 github page 仓库。

ssh 密钥

我其实已经有 ssh 密钥了,我还是另外生成一个专门做 hexo action 的 ssh 密钥,谁知道 github 哪天会被黑客获取了私有信息。

生成 ssh 密钥

1
ssh-keygen -t rsa -f ~/.ssh/id_rsa_x -C "xxxx@gmail.com"

运行后需要输入两次相同的密码,如果不想输入,直接回车就行。我把私钥的名字命名为id_rsa_x,公钥就是id_rsa_x.pub。私钥我们设置在 blog 源码仓库,公钥设置到 github page 仓库。下面我们就一步一步来设置 github。

配置 blog 仓库

在 blog 仓库的Settings->Sectrets页面找到New resposity secret按钮,点击后,把~/.ssh/id_rsa_x的所有内容都贴到里面去,命名为HEXO_DEPLOY_PRIVATE_KEY报错即可。

https://cdn.jsdelivr.net/gh/bubao/picgo_db@master/img/20210310211857

接下来在与Settings同一栏的Actions中编辑一个 action。

https://cdn.jsdelivr.net/gh/bubao/picgo_db@master/img/20210310212911

点击set up a workflow yourself,把下面的内容贴进去,把<你的用户名><你登录的 email>都改成对应的值(不包含<>),保存即可

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
# workflow name
name: Hexo Blog CI

# master branch on push, auto run
on:
push:
branches:
- master

jobs:
build:
runs-on: ubuntu-latest

steps:
# check it to your workflow can access it
# from: https://github.com/actions/checkout
- name: Checkout Repository master branch
uses: actions/checkout@master

# from: https://github.com/actions/setup-node
- name: Setup Node.js 12.x
uses: actions/setup-node@master
with:
node-version: "12.x"

- name: Setup Hexo Dependencies
run: |
npm install hexo-cli -g
npm install

- name: Setup Deploy Private Key
env:
HEXO_DEPLOY_PRIVATE_KEY: ${{ secrets.HEXO_DEPLOY_PRIVATE_KEY }}
run: |
mkdir -p ~/.ssh/
echo "$HEXO_DEPLOY_PRIVATE_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts

- name: Setup Git Infomation
run: |
git config --global user.name '<你的用户名>'
git config --global user.email '<你登录的 email>'
- name: Deploy Hexo
run: |
hexo clean
hexo generate
hexo deploy

这样就配置好了。

配置 github page

在 github page 仓库的Settings->Deploy keys页面点击Add deploy key按钮

https://cdn.jsdelivr.net/gh/bubao/picgo_db@master/img/20210310213542

把之前生成的~/.ssh/id_rsa_x.pub的内容填到里面去,记得把Allow write access的小勾点上。

https://cdn.jsdelivr.net/gh/bubao/picgo_db@master/img/20210310213828

这样就设置好所有的配置,赶快去发表一篇博客看看,不用再执行hexo clean; hexo g -d,action 也能帮你发布博客。

参考资料

  1. GitHub Action + Hexo 实现在线写作