Hexo博客在部署的时候,随着文章越来越多,编译的时间也会越来越长,而通过Github Action,我们可以在完成博客编写和修改之后直接将改动push到远程仓库,让其自动完成编译和部署

创建存放源码的私有仓库

首先,需要创建一个用来存放Hexo博客源码的私有仓库

之后我们需要将源码push到这里

采用私有仓库的原因是以下的操作会使用token,如果token被盗用则盗用者可以任意操作你的git仓库

获取Token

Github Token

在github的Settings中选择 Developer Settings -> Personal access tokens -> generate new token,token名字任意,勾选上repo项

快速访问

确定生成后,将token复制下来保存好

官方提示:Make sure to copy your new personal access token now. You won’t be able to see it again!

就是说这个只显示一次,如果你丢失了这个token,那么你得重新再生成一个

Gitee Token

头像(右上角) -> 设置 -> 私人令牌 -> 生成新令牌

快速访问

同样需要保存好这个token

配置deploy项

打开站点配置文件_config.yml,对deploy进行修改

修改格式如下

1
2
3
4
5
6
deploy:
- type: git
repo:
gitHub: https://[GithubUsername]:[GithubToken]@github.com/[GithubUsername]/[GithubBlogRepo].git
gitee: https://[GiteeUsername]:[GiteeToken]@gitee.com/[GiteeUsername]/[GiteeBlogRepo].git
branch: master

配置Github Action

在博客的根目录新建.github文件夹,进入并创建workflows文件夹,然后在其内创建autodeploy.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
55
56
# 当有改动推送到master分支时,启动Action
name: 自动部署

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

release:
types:
- published

jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: 检查分支
uses: actions/checkout@v2
with:
ref: master #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: 部署
run: |
git config --global user.name "[GithubUsername]"
git config --global user.email "[GithubEmail]"
git clone git@github.com:[GithubUsername]/[GithubBlogRepo].git .deploy_git
# =====注意.deploy_git前面有个空格=====
# clone 静态文件仓库,防止 Hexo 推送时覆盖整个静态文件仓库,只推送有更改的文件
hexo deploy

配置远程仓库和分支

在.gitignore中输入以下内容

1
2
3
4
5
6
7
8
9
10
.DS_Store
Thumbs.db
db.json
*.log
node_modules/
public/
.deploy*/
.deploy_git*/
.idea
themes/butterfly/.git

然后提交源码到私有仓库

指令如下

1
2
3
4
5
6
7
8
9
10
git remote rm origin # 删除原有仓库链接
git remote add origin git@github.com:[GithubUsername]/[SourceRepo].git #[SourceRepo]为新的存放源码的github私有仓库
git checkout -b master # 切换到master分支,
#2020年10月后github新建仓库默认分支改为main,注意更改
# 如果不是,后面的所有设置的分支记得保持一致
# 2020年10月以后,新建仓库的默认分支换成main
git add .
git commit -m "github action update"
git push origin master
#2020年10月后github新建仓库默认分支改为main,注意更改

遇到的一些奇怪错误

上传完成之后打开仓库的action,发现已经开始跑action了,但是我这里部署失败了

检查了各个仓库的拼写,重新生成了token都没有解决这个问题

所以我把部署分开写,然后检查在哪个环节出的问题

发现是clone这句出了问题,问了一下Akilar,得到的答复是

于是我注释了这句,最后的文件为

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
# 当有改动推送到master分支时,启动Action
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: 用户名
run: |
git config --global user.name "forever97"
- name: 邮箱
run: |
git config --global user.email "857426255@qq.com"
#- name: 克隆静态文件仓库
#run: |
#git clone git@github.com:forever97/forever97.github.io.git .deploy_git
# =====注意.deploy_git前面有个空格=====
# clone 静态文件仓库,防止 Hexo 推送时覆盖整个静态文件仓库,只推送有更改的文件
- name: 部署
run: |
hexo deploy

部署成功