使用Github Action自动部署HEXO博客

絮絮叨叨

GitHub 支持 Action进行CI操作已经很多年了。似乎是从2020年就已经开始支持,从那时开始就打算使用GitHub Action来自动化部署我的博客。

用GitHub Action 有很多好处,只管在编辑器中编写markdown格式的博客原稿就好了,不再需要在本地部署node以及hexo的那一大堆依赖,很容易就可以在不同的地方写博客。换句话说,让写博客更纯粹,只需关注写的内容即可。

但是由于近来几年更新少,所以就一直没搞这套操作。趁着国庆的时间,好好的看了一些关于Github Action的资料,准备把这个CI给用起来。相信搞完之后,以后提交博客文章就可以在Action界面看到CI的执行状态。就像在公司提交代码时一样~

image-20241008212334947

行动起来

简明扼要的开始记录折腾步骤

先去用户设置创建一个token

  1. 进入设置

    image-20241008205826994
  2. 左下角进入 Developer setting

    image-20241008210118133
  3. 到Token classic 里面去生成一个新的token

    image-20241008210221971
  4. 填写自己的token名,然后勾选仓库和workflow的权限,然后点生成token

    image-20241008210504382
  5. 接着就复制token,存好到一个地方,比如在微信文件助手里面给自己发一下

    image-20241008210737941
  6. 去hexo源码仓,就是我们提交post文章的仓里,创建一个secrets

    image-20241008211156866 image-20241008211323682 image-20241008211303765
  7. 到仓库的Action页面查看image-20241008213844439

CI界面还可以看到所有workflow的执行记录,非常奈斯

image-20241008220229821

如果出现了错误,可以直观的在错误日志里面看到错误的信息,以便于后续修改CI脚本或者其他的内容

image-20241008220439858

效果

成功部署之后可以在被部署的仓库看到提交的记录

image-20241008220905720

最终的Action脚本

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
name: CI

on:
push:
branches:
- main

env:
GIT_USER: 写你自己的
GIT_EMAIL: 写你自己的
THEME_REPO: 写你自己的源码仓地址
THEME_BRANCH: main
DEPLOY_REPO: 写你自己的HEXO public仓地址,是名字带 .github.io 的仓
DEPLOY_BRANCH: main

jobs:
build:
permissions:
contents: read
pages: write
name: Build on node ${{ matrix.node_version }} and ${{ matrix.os }}
runs-on: ubuntu-latest
strategy:
matrix:
os: [ubuntu-latest]
node_version: [20.x]

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Checkout theme repo
uses: actions/checkout@v4
with:
repository: ${{ env.THEME_REPO }}
ref: ${{ env.THEME_BRANCH }}
path: theme_build

- name: Use Node.js ${{ matrix.node_version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node_version }}

- name: Install Hexo dependencies
run: |
cd ./theme_build
pwd
ls -l
yarn
npm install hexo-util hexo-cli hexo-deployer-git -g

- name: Deploy hexo
run: |
cd ./theme_build
hexo clean
hexo g
ls

- name: Checkout deploy repo
uses: actions/checkout@v4
with:
repository: ${{ env.DEPLOY_REPO }}
ref: ${{ env.DEPLOY_BRANCH }}
path: .deploy_git

- name: Copy hexo public to Deployed Repo
run: |
cp -r ./theme_build/public/* .deploy_git/
ls .deploy_git/

- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
personal_token: ${{ secrets.DELOPY_TOKEN }}
publish_dir: .deploy_git
external_repository: ${{env.DEPLOY_REPO}}
publish_branch: ${{ env.DEPLOY_BRANCH }}
commit_message: "Auto Delopy by CI"

总结

爽!!!就一个字

在CI里面,我加了很多乱七八糟的打印和各种垃圾东西,还有这个Action的yaml参考了很多很多的文章,打开的标签页实在太多,已经找不到参考的是谁的了。只能说,感谢各位大神的无私分享,让我东拼西凑出一个Action,感谢