利用 Github Actions 自动部署 Hexo博客
介绍
使用Hexo框架写博客时,每次都要经历清除、生成、部署,使用Github Actions可以实现自动化工作流。
假设用一个 blog
仓库存储markdown等文件,使用 Github Actions后,每次push时即可自动生成部署到 .github.io
仓库中去。如果有gitee或其他域名要同步部署博客,Github Actions提供 的便利会更明显。
确定目标
- 用一个仓库存储markdown等原始文件。
- 原始文件仓库push操作后自动部署到GitHub Pages仓库
- (可选)原始文件仓库push操作后自动部署到Gitee Pages仓库
- (可选)原始文件仓库push操作后自动部署到所购买域名的对应文件系统
目前只使用GitHub Pages部署博客,故本文只介绍这部分对应流程。
准备
创建所需仓库
- 创建
blog
仓库存放Hexo项目,仓库可以私密。 - 创建
yourname.github.io
仓库存放静态博客页面,仓库需要公开。
为仓库配置密钥
生成密钥
1 | ssh-keygen -f github-deploy-key |
当前目录下会有 github-deploy-key
和 github-deploy-key.pub
即私钥和公钥两个文件。
配置私钥
复制 github-deploy-key
文件内容,在Hexo项目仓库,此处即 blog
仓库 Settings -> Secrets -> Secrets -> Actions
页面上点击 New repository secret
添加。
- 在
Name
输入框填写HEXO_DEPLOY_PRI
。 - 在
Value
输入框填写github-deploy-key
文件内容。

配置公钥
复制 github-deploy-key.pub
文件内容,在静态博客页面仓库,此处即 yourname.github.io
仓库 Settings -> Deploy keys
页面上点击 Add deploy key
添加密钥。
- 在
Title
输入框填写HEXO_DEPLOY_PUB
。 - 在
Key
输入框填写github-deploy-key.pub
文件内容。 - 勾选
Allow write access
选项。
编写Github Actions
在 blog
仓库创建文件 .github/workflows/hexoCI.yml
- Github项目会自动识别 .github/workflows/ 文件夹下的 yml 类型文件
- 若在本地仓库创建该 yml 文件,需要手动 git add 将其加入版本流中
文件内容如下,记得修改env中参数
1 | name: HEXO CI |
关键参数说明
-
env为环境变量对象
- GIT_USER 和 GIT_EMAIL 是博客仓库对应的Github账户的用户名和登录邮箱
- THEME_REPO 和 THEME_BRANCH 是 Hexo 所使用的主题的仓库及其分支,本人此处使用了 butterfly 主题。
-
其他版本参数
- Github Actions具体过程会在一个容器中实现,ubuntu-latest指定了容器使用最新版ubuntu。此处也可使用其他版本或其他系统,如Windows、Mac等。
- Node.js使用目前最新稳定版 16.x,部分后续操作(如checkout)可能有具体要求。
- 关于actions/checkout@v2 和 actions/setup-node@v2,目前最新版为 v3,此处选择稳定的v2版本。
Actions流程说明
name指定此Action的名字,会在GitHub仓库的Actions
页面看到。
1 | on: |
on部分指定触发条件,此处push操作触发后续action,branches指定具体分支。当master分支收到push时执行任务。
env配置后续参数供后面使用。
1 | jobs: |
触发条件达成后自动执行 jobs
后的多个任务,此处只配置了build一个任务。runs-on指定容器版本,node-version指定Node.js版本。
steps后面编写具体的多个步骤。
1 | - name: Checkout |
name 指定步骤名,uses指定步骤调用的Action,详情参见官方Action市场
此处先checkout当前hexo仓库到本地,再checkout主题仓库到对应目录。
主题仓库由于存在git版本控制文件,push整个hexo仓库时默认跳过这部分,所以需要单独checkout到action容器中。也可以考虑简单粗暴的删除主题对应的git版本控制文件夹
.git
,这样就只需一次checkout即可。此外,若和我一样留下主题的
.git
文件夹,对主题的魔改文件要放置于主题文件夹之外。
1 | - name: Use Node.js ${{ matrix.node-version }} |
actions/setup-node
配置容器 Node.js 环境
1 | - name: Configuration environment |
配置环境,使用git的标准开局。
后续操作包括安装依赖,清除、生成、部署 Hexo 博客。大家应该很熟悉,不再赘述。
参考资料
利用 Github Actions 自动部署 Hexo 博客
hexo配合github action 自动构建(多种形式)
与本人最终action配置文件对比,参考资料有多余或者缺少的部分,可能是项目具体配置有不同之处,如主题文件是否保留git版本控制文件。