获取 Token

为了确保交由Github Action来持续部署时,Github Action 具备足够的权限来进行 hexo deploy 操作,需要先获取 Token

访问 Github –> 右上角头像 –> Settings –> Developer Settings –> Personal access tokens –> Tokens (classic) –> generate new token –> Generate new token (classic)

  • Note(名称):随意;
  • ExpirationNo expiration(永不过期);
  • Select scopes:必须勾选 repo 项 和 workflows 项。

token 只会显示这一次,之后将无法查看,所以务必保证你已经记录下了 Token。之后如果忘记了就只能重新生成重新配置了。

创建存放源码的私有仓库

我们需要创建一个用来存放 Hexo 博客源码的私有仓库[SourceRepo]

访问 Github –> 右上角头像左侧 + 号 –> New repository,名称随意,类型选择 Private –> Create repository

创建完成后,需要把博客的源码[Blogroot] push 到这里。

这里之所以是私有仓库,是因为在接下来的配置中会用到 Token,如果 Token 被盗用,别人可以肆意操作你的 github 仓库内容,为了避免这一风险,才选择的博客源码闭源。

创建存放渲染后文件的公开仓库

访问 Github –> 右上角头像左侧 + 号 –> New repository,名称随意,类型选择 Public –> Create repository

配置 Github Action

[Blogroot]新建.github文件夹,注意开头是有个.的。然后在.github 内新建 workflows 文件夹,再在 workflows 文件夹内新建 autodeploy.yml,在[Blogroot]/.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
name: 自动部署
# 当有改动推送到master分支时,启动Action
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

- 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: 部署到Github
uses: JamesIves/github-pages-deploy-action@v4
with:
token: # 填写自己获取的token
repository-name: #格式为:[GitHub用户名]/[上一步创建的公开仓库名]
branch: master #分支名
folder: public
commit-message: "${{ github.event.head_commit.message }} Updated By Github Actions"

推动到远程仓库

若更改过配置文件,在推送之前,建议先本地生成静态文件试运行,防止因代码格式等问题自动部署失败。

同时在自动部署 –> 生成静态文件出错也可以同理反查问题源。

重新设置远程仓库和分支

删除或者先把[Blogroot]/themes/butterfly/.git移动到非博客文件夹目录下,原因是主题文件夹下的.git文件夹的存在会导致其被识别成子项目,从而无法被上传到源码仓库。

在博客根目录[Blogroot]路径下运行指令

1
2
3
4
5
git init #初始化
git remote add origin git@github.com:[GithubUsername]/[SourceRepo].git #[SourceRepo]为存放源码的github私有仓库
git checkout -b master # 切换到master分支,
#2020年10月后github新建仓库默认分支改为main,注意更改
# 如果不是,后面的所有设置的分支记得保持一致

添加屏蔽项

因为能够使用指令进行安装的内容不包括在需要提交的源码内,所有我们需要将这些内容添加到屏蔽项,表示不上传到 github 上。这样可以显著减少需要提交的文件量和加快提交速度。打开[Blogroot]/.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

如果不是butterfly主题,记得替换最后一行内容为你自己当前使用的主题。

运行 git 提交指令,将博客源码提交到 github 源码私有仓库。

1
2
3
4
git add .
git commit -m "github action update"
git push origin master
#2020年10月后github新建仓库默认分支改为main,注意更改

查看部署情况

打开 GIthub 存放源码的私有仓库 –> action

根据刚刚的 Commit 记录找到相应的任务

点击 Deploy 查看部署情况

全部打钩,完成自动部署。

参考链接