使用 GitHub Action 自动部署 Hexo

Github Actions 是Github官方推出的 CI/CD 工具,通过它,可以在每次提交代码时,自动编译并部署到 Github Pages。这样就不用每次写好博客时,手工部署到服务器上。
Github Actions 针对公开仓库永久免费。当然,像博客这样的数据我们一般都是放在私有仓库里的,Github Actions 同样提供每月至少 2000 分钟的运行时长,这个时间对于博客的自动部署是足够了。

生成Github Personal access token

在 Settings -> Developer settings -> Personal access tokens 中,点击 Generate new token,我们可以生成 token。在生成 token 时,我们要注意勾选上repo权限。需要注意的是,这里生成的token在关闭网页后就没法再次查看了,所以这里一定要保存好,在下一步中我们会用到这个 token。
Personal access token

设置仓库

我们在这里用的是双仓库的形式,即仓库 A 存放 Hexo 源文件,仓库 B (xxx.github.io) 存放生成的部署文件。对仓库 A 进行 push 之后,会自动更新部署仓库 B。
我们需要在仓库 A 中的 Settings -> Secrets -> Add a new secret 中添加我们刚刚生成的 token,名称 为GITHUB_ACCESS_TOKEN
secrets

配置 Hexo 的部署方式

修改 hexo 文件夹中的_config.yml,将下面代码中的YOUR_GITHUB_USERNAMEYOUR_GITHUB_REPO修改为自己的内容。

1
2
3
4
deploy:
- type: git
repo: https://GITHUB_ACCESS_TOKEN@github.com/YOUR_GITHUB_USERNAME/YOUR_GITHUB_REPO.git
branch: master

配置 Github Actions

在 Hexo 根目录下新建.github/workflow/blogci.yml文件,修改 YOUR_NAMEYOUR_EMAIL为自己的内容。

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
name: CI

on: [push]

jobs:
build:

runs-on: ubuntu-latest

steps:
- name: Download Source file
uses: actions/checkout@v2
with:
ref: master # 此处修改为自己存放 Hexo 源文件的分支

- name: Prepare Node env
uses: actions/setup-node@v1
with:
node-version: "10.x"

- name: Set env
env:
GITHUB_ACCESS_TOKEN: ${{ secrets.GITHUB_ACCESS_TOKEN }}
run: |
git config --global user.name 'YOUR_NAME'
git config --global user.email 'YOUR_EMAIL'
sed -i "s/GITHUB_ACCESS_TOKEN/$GITHUB_ACCESS_TOKEN/g" ./_config.yml

- name: Hexo Setup
run: |
npm i -g hexo-cli
npm i hexo-deployer-git --save

- name: Hexo Deploy
run: |
hexo clean && hexo g && hexo d

使用 FTP 进行部署

Hexo 的 FTP 部署方式会将远程服务器的文件夹清空后,再上传生成的文件。然而,在清空文件夹的步骤中会报错,因而转用 Github Actions 第三方市场中的 Action 进行部署。在blogci.yml文件中添加以下代码,并在Secrets中依次添加 FTP_SERVERFTP_USERNAMEFTP_PASSWORD

1
2
3
4
5
6
7
- name: Upload ftp
uses: sebastianpopp/ftp-action@releases/v2
with:
host: ${{ secrets.FTP_SERVER }}
user: ${{ secrets.FTP_USERNAME }}
password: ${{ secrets.FTP_PASSWORD }}
localDir: "public"

最后将仓库推送至 Github ,就可以看到 GIthub Actions 会自动部署你的博客了。


使用 GitHub Action 自动部署 Hexo
https://slw.im/2020/04/github-action-for-hexo/
作者
Ryo Shen
发布于
2020年4月12日
许可协议