使用 GitHub Actions 完成 Hexo 博客的自动生成与部署

使用 GitHub Actions 完成 Hexo 博客的自动生成与部署

虽然现在博客已经迁移到 Wordpress 上,但是每次还是会在本地通过 hexo new xxx 来生成一份本地文件。

而我的 Hexo 原始文件是按照

使用hexo,如果换了电脑怎么更新博客? - CrazyMilk的回答 - 知乎 https://www.zhihu.com/question/21193762/answer/79109280

这种方式来进行备份的。因为更换了新的电脑,把仓库 clone 下来的时候因为网络的问题 npm install 总是失败,并且在本地写文章然后 push 然后再执行Hexo 相关的指令相对来说比较复杂。所以就想到把 Hexo 的生成和部署让某些东西自动完成,在本地只需要负责写作就好。

使用 GitHub Actions 在 push 的时候自动生成和部署hexo静态页面

首先要为仓库生成一个 Deploy Key

1
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

然后在这一步输入这对 Key 的文件名,如果直接回车会覆盖掉自己的 Key

1
2
Generating public/private rsa key pair.
Enter file in which to save the key (/home/yourname/.ssh/id_rsa):

接下来去仓库的setting里面

在 Deploy keys 这里把刚刚生成的密钥对中的公钥添加进去

然后在 Secrets 里把刚刚生成的密钥对中的私钥添加进去,名字可以随意取,在 GitHub Actions 中以 $引用

Screenshot from 2019-12-25 11-55-21.png

创建一个 GitHub Actions WorkFlow

在目录下创建 .github/workflow/your-action-name.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
name: deploy hexo

on:
push:
branches:
- hexo

jobs:
generate-and-deploy:
runs-on: [ubuntu-latest]
steps:
- name: checkout
uses: actions/checkout@v2
with:
ref: hexo

- name: setup node env
uses: actions/setup-node@v1
with:
node-version: "10.x"

- name: setup ssh ang git env
env:
PRIVATE_KEY: ${{secrets.HEXO_DEPLOY_KEY}}
run: |
mkdir -p ~/.ssh/
echo "$PRIVATE_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
# set git infomation
git config --global user.name 'your name'
git config --global user.email 'your email'
npm install & npm install -g hexo-cli
npm install hexo-renderer-scss --save

- name: gengration and deploy
run: hexo g -d

具体的用法可以查看官方文档

1
2
3
4
on:
push:
branches:
- hexo

表示在 hexo 分支 push 触发。jobs 表示执行任务,一个 jobs 可以包含多个 steps

1
2
3
4
5
6
7
8
- name: checkout
uses: actions/checkout@v2
with:
ref: hexo
- name: setup node env
uses: actions/setup-node@v1
with:
node-version: "10.x"

使用 checkout 获取 hexo 分支的源码 ,并设置 node 环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- name: setup ssh ang git env
env:
PRIVATE_KEY: ${{secrets.HEXO_DEPLOY_KEY}}
run: |
mkdir -p ~/.ssh/
echo "$PRIVATE_KEY" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
# set git infomation
git config --global user.name 'your name'
git config --global user.email 'your email'
npm install & npm install -g hexo-cli
npm install hexo-renderer-scss --save

- name: gengration and deploy
run: hexo g -d

然后就很常规的写入 ssh key 然后安装相应的东西,最后调用 hexo 的命令进行生成和部署

查看执行情况

可以去项目仓库的 actions 查看每个 workflow 的执行情况