Github Actions实现自动化部署Hexo博客

痛点

在Github上面用Hexo建立自己的个人博客,用到了2个仓库,一个用来放hexo的源代码,方便更换设备后依旧可以无缝衔接写博客,另一个仓库用来展示博客网站,放的是发布文章的源代码。

(源码仓库)

那么问题就来了,现在我写完博客,既要先同步hexo代码到GitHub仓库,还要发布最新的文章到博客网页,要打两份工,很费时间,那么有没有自动化的工具来处理这些繁杂的工作?当然有的,推荐使用官方的Github Actions。

当我们将hexo代码push到远程仓库后,触发GitHub Actions的workflow,然后workflow会创建一个运行环境,获取到hexo源码,再进行构建和部署,最后发布到博客仓库。也就是说我们只要推送hexo代码,剩下的就由github Actions自动完成。

下面是具体的配置:

配置

生成deploy keys

前面提到两个仓库,一个是博客仓库,是以.gihub.io结尾的,另一个是放置hexo代码的,一定要先区分好这两个仓库。

接下来就要生成密钥,敲入如下命令

1
ssh-keygen -f github-deploy-key

当前目录下会有 github-deploy-key 和 github-deploy-key.pub 两个文件,我觉得也可以用GitHub配置ssh密钥的这两个文件,不过为了区分,可以单独再创建这两个文件。

配置博客仓库deploy keys

打开博客仓库,结尾是.gihub.io,打开Settings,按照下图操作
(源码仓库)
(源码仓库)

将github-deploy-key.pub里面的密钥全部复制到Key里面,title可以自己定义。上面的deploy keys是我以前配置的,别管他。

配置Hexo仓库Secrets

打开Hexo仓库的Settings,找到Secrets按照下图操作
(源码仓库)

将github-deploy-key的内容全部复制到Value中,Name自己定义,上面的2个也是我之前配置的,不用慌。

编写Github Actions

创建配置文件

点击打开Actions 创建workflows
(源码仓库)
(源码仓库)
(源码仓库)
可以选择一个nodejs模板,也可以不选,直接复制下面我给出的模板

对照下面的配置模板,选择性粘贴进创建的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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# This is a basic workflow to help you get started with Actions

name: CI

# Controls when the workflow will run
on:
# Triggers the workflow on push or pull request events but only for the main branch
push:
branches: [ main ]
pull_request:
branches: [ main ]

# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
build:
# The type of runner that the job will run on
runs-on: ubuntu-latest

# Steps represent a sequence of tasks that will be executed as part of the job
steps:
- name: Checkout source
uses: actions/checkout@v1
with:
ref: main

- name: Setup Node.js
uses: actions/setup-node@v1
with:
node-version: '12'


- name: Setup Hexo
env:
# HEXO_DEPLOY_PRI_XIAOXIN_WINDOW 这个就是配置hexo仓库secrets的name,一定要对应上
ACTION_DEPLOY_KEY: ${{ secrets.HEXO_DEPLOY_PRI_XIAOXIN_WINDOW }}
run: |
mkdir -p ~/.ssh/
echo "$ACTION_DEPLOY_KEY"> ~/.ssh/id_rsa
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
git config --global user.email 你的GitHub邮箱
git config --global user.name 你的GitHub名字
npm install hexo-cli -g
npm install
- name: Deploy
run: |
hexo clean
hexo deploy

简单解释一下,当我们推送内容到远程main分支的时候,就会触发这个Workflow。

使用最新的Ubuntu作为hexo deploy的系统。

首先checkout源代码,然后设置使用最新的Node.js v12 LTS作为node解释器。

接着就是配置SSH相关的配置文件,secrets.HEXO_DEPLOY_PRI_XIAOXIN_WINDOW,这个名字一定要对应配置Hexo仓库Secrets

git config相关的名字和邮件地址替换成大家自己使用的就好了。

最后就是安装Hexo CLI,各个依赖模块和部署了。

验证效果

下面就是运行成功的效果,成功的都会打上勾
(源码仓库)

失败了的话可以打开看看哪里报错了,再仔细看看哪里配置不对,再修改。成功了,博客仓库的更新有一点时间的延迟,耐心等待几分钟就好了。
(源码仓库)
最后贴上自己搭建的博客网站:
https://xiaoborao.github.io/