记录下自己使用Github Action自动化部署hexo博客。主要是把它搞成功废了太多的时间,因此必须记录下用来以后回顾。

做这个的目的是:第一,解放双手。在这之前,hexo部署到github都是要hexo三连,完成这个后,一条命令git三连(下方git命令的后三个)就可以把博客部署上线。第二,也是最重要的,随着文章的增加,使用hexo三连耗费的时间会越来越多,在这期间不能退出git,需要一直等待上传部署完毕,而自动化后,基本就是秒传,后面的部署交给github action就好,相当的快。

这里仅仅展示github平台

功能原理

我对它的个人理解是:github的page repository即公共的,你上线网站的仓库。或者简单讲就是以github用户名+github.io作为仓库名的仓库github的普通私有仓库只是存储代码,并不能用来线上访问本地hexo站点之间的关系是这样的:page repository普通私有仓库在建立好关系后会一直”对话“,page repository问私有仓库你变了没,如果普通私有仓库发生变化,page repository就会立即也同步发生变化,变化与否是同步的;而hexo本地是hexo博客作者直接接触的,hexo本地发生变化,作者只需要把变化发给私有仓库即可。为啥不直接发给page repository,因为hexo是静态页面,每次直接部署都要全部清除缓存,再生成,再部署(即hexo三连),每次都全部清零重新部署,耗费大量时间。自动部署快的原因是私有仓库已有的就无需耗费时间生成了。

账号与私有仓库

准备账号token,私钥和公钥;创建github私有仓库;给仓库添加环境变量。储存源码选择私有仓库会很安全!!

获取账号token,私钥和共钥,已经有的可以跳过此步

私钥是:id_rsa,将私钥配到仓库变量,下面会讲到

公钥是:id_rsa.pub,将公钥配置到github账号,上述链接有说

创建私有仓库

  1. 登录github账号,新建仓库
  2. 仓库名,自己随便写,我输的zdbs
  3. 描述可选,我输zdbs
  4. 选择私有
  5. 点击创建

Snipaste_2022-08-14_22-27-44

配置私有仓库的环境变量

Snipaste_2022-08-14_22-48-36

Snipaste_2022-08-14_22-53-07

name value
GITHUBUSERNAME 你的github账号用户名
GITHUBEMAIL 注册github账号的邮箱
GITHUBTOKEN 之前获取的token令牌
HEXO_DEPLOY_PRI 之前获取的私钥

本地站点根目录

  1. 在\BlogRoot\.github 文件夹下新建workflows文件夹
  2. 在workflows文件夹下新建autodeploy.yml文件
  3. 将以下代码复制到autodeploy.yml

注意,下方代码和原创相比修改了四处,其中三处将master改为main,再有就是将最后几行的其他平台删除,仅保留了github。github平台的,这三处master分支一定改为main分支。

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
55
56
name: 自动部署

on:
push:
branches:
- main #2020年10月后github新建仓库默认分支改为main,注意更改

release:
types:
- published

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: 检查分支
uses: actions/checkout@v2
with:
ref: main #2020年10月后github新建仓库默认分支改为main,注意更改

- name: 安装 Node
uses: actions/setup-node@v1
with:
node-version: "12.x"

- name: 安装 Hexo
run: |
export TZ='Asia/Shanghai'
npm install hexo-cli -g

- name: 缓存 Hexo
uses: actions/cache@v1
id: cache
with:
path: node_modules
key: ${{runner.OS}}-${{hashFiles('**/package-lock.json')}}

- name: 安装依赖
if: steps.cache.outputs.cache-hit != 'true'
run: |
npm install --save

- name: 生成静态文件
run: |
hexo clean
hexo generate

- name: 部署 #此处master:master 指从本地的master分支提交到远程仓库的master分支,若远程仓库没有对应分支则新建一个。如有其他需要,可以根据自己的需求更改。
run: |
cd ./public
git init
git config --global user.name '${{ secrets.GITHUBUSERNAME }}'
git config --global user.email '${{ secrets.GITHUBEMAIL }}'
git add .
git commit -m "${{ github.event.head_commit.message }} $(date +"%Z %Y-%m-%d %A %H:%M:%S") Updated By Github Actions"
git push --force --quiet "https://${{ secrets.GITHUBUSERNAME }}:${{ secrets.GITHUBTOKEN }}@github.com/${{ secrets.GITHUBUSERNAME }}/${{ secrets.GITHUBUSERNAME }}.github.io.git" master:main

git命令行

进入你的博客根目录,右键gitbash here,把下面代码复制粘贴进去

第二条命令的origin后面输入私有仓库的SSh链接;格式为git@github.com:账号用户名/私有仓库名.git

1
2
3
4
5
6
git init 
git remote add origin
git checkout -b main
git add .
git commit -m "github action update"
git push origin main

成功标志

Snipaste_2022-08-14_23-26-27

参考文章