Github Action自动化部署Hexo博客(未完成)
Github创建私有仓库保存源代码,然后通过 Github Action 发布到公共仓库
博客源码管理
前言
在之前教程中介绍了搭建Hexo博客,但是有些不足,通过本文可以进行优化。搭建免费博客:Hexo butterfly cloudflare | ZのBlog (fkcz.cc)
原本博客的发布方式为:
- 在本地部署好 Hexo 博客的运行环境
- 通过
hexo g将写好的 Markdown 文件转化为 HTML 文件 - 然后用
hexo d把生成的 public 文件夹内所有内容推送到 Github 仓库中
这样直接将生成的可以运行的实际产物(生产版)推送到 GitHub 仓库上,而不是博客源码(开发版),每当本地环境变更或者想在别的电脑上写文章时就麻烦了、必须得重新部署一遍环境,而且也不会留存历史变更记录。
所以可以将博客源码推送到 Github 的私有仓库中,利用 GitHub 来对源码进行版本控制,同时也利于博客未来的维护、更新。
配置
-
Github创建私有仓库
-
初始化本地仓库
在本地hexo博客根目录,打开 Git Bash ,输入:
git init,此时Hexo源码目录下会多一个.git的文件夹(Windows需要在文件管理器中打开:隐藏的项目) -
绑定远程仓库
使用VS code 操作,可以查看:VS Code & Git 使用 (未完成) | Z の Blog (fkcz.cc)
或者直接使用命令操作:1
2git remote add origin https://github.com/xxx/xxx.git //添加远程仓库
git remote -v //查看当前配置的远程仓库信息为当前本地仓库添加Git用户名和邮箱:(因为我Git用的多用户配置,没有配置
全局Git,如果你设置的有全局设置,就不用这一步。) Git配置多个github账号 | ZのBlog (fkcz.cc)1
2git config --local user.name xxx
git config --local user.email [email protected] -
推送到远程仓库
默认情况下 本地hexo博客根目录下的
public/不会被上传(也不该被上传),必须要确保.gitignore文件中包含一行public/1
2
3
4
5
6
7
8.DS_Store
Thumbs.db
db.json
*.log
node_modules/
public/
.deploy*/
_multiconfig.yml还有一个很重要的一步:在
themes文件夹下,找到主题文件夹下的.git文件夹,将其压缩备份,在将.git文件夹删除,然后再进行推送到远程仓库这一步。(Git仓库中不能嵌套另一个,所以需要把其他的压缩备份或者删掉)使用VS code 操作,可以查看:VS Code & Git 使用 (未完成) | Z の Blog (fkcz.cc)
或者直接使用命令操作:1
2
3git add // 添加到暂存区
git commit -m"添加个人网站源码" // 提交到本地仓库并添加提交信息
git push origin hexo // 将本地的 `main` 分支推送(push)到远程仓库 `origin` 的 `main` 分支网络好的话,过一会就可以在之前创建的Github私有仓库看到文件了,现在就可以利用 Git 来对源码进行版本控制了。
博客自动化部署
前言
上一步已经创建了一个私有仓库,用来存放博客文件,存放的是编译前的文件,也就是电脑本地的文件,这个仓库是拿来做自动化和备份的。
现在创建创建一个公开仓库,也就是 pages 仓库,仓库名为 yourusername.github.io((将 yourusername 替换为你的 GitHub 用户名)。确保仓库是公开的。)
现在也就是一共有两个仓库
- 一个公有仓库,存编译好的hexo 博客文件(pages仓库,博客仓库)
- 一个私有仓库,存本地电脑编译前的源文件(自动化仓库,源文件仓库)
仓库配置
-
前言
因为我们最终要实现的是:本地更改文件后推送到远程的源文件仓库 —> 源文件仓库触发自动部署任务后将博客推送到pages仓库。
所以需要创建一个ssh密钥,私钥放在源文件仓库,公钥放在pages仓库,这样源文件仓库自动部署博客后就可以把生成的内容推送到pages仓库,具体操作如下:在本地电脑输入以下命令生成一对 SSH 密钥,注意更改文件名避免将正在使用的密钥覆盖。
1
ssh-keygen -t rsa -f ~/.ssh/id_deploy -C "[email protected]"
通过上方命令后会在用户文件夹(
C:\Users\你的用户名\.ssh)的.ssh生成id_deploy.pub和id_deploy。其中id_deploy为私钥,id_deploy.pub为公钥。 -
源文件仓库配置
将上一步创建的
id_deploy文件(私钥)的内容用记事本复制出来,在源文件仓库的Settings -> Secrets -> Actions中添加 SSH 私钥,命名为SSH_DEPLOY_KEY。

然后再新建两个变量(后面需要用),分别是
GITHUBMAIL和GITHUBUSERNAME
现在有了三个变量:GITHUBMAIL:Github 用户邮箱地址GITHUBUSERNAME:Github 用户名SSH_DEPLOY_KEY:私钥内容
-
pages仓库配置
在pages仓库的
Settings -> Deploy keys中添加 SSH 公钥,注意勾选Allow write access
配置Github Actions
- 编写 Github 的脚本文件,GitHub Actions 的配置文件叫做 workflow 文件,存放在源代码仓库的
.github/workflows目录下。 - workflow 文件采用 YAML 格式,文件名可以任意取,但是后缀名统一为 .
yml,比如test.yml。一个库可以有多个 workflow 文件。 - GitHub 在我们完成预设触发条件时,只要发现
.github/workflows目录里面有.yml文件,就会自动读取运行该文件。
在本地的博客根目录中创建 .github/workflows/pages.yml,写入以下内容
1 | name: Pages |
这里面里面有三个变量,是上一步在源文件仓库中配置的。
其运行流程为:
- 检查代码变动:在推送代码时,监测是否有文件变动,并且只监测特定的文件(JSON、YAML 和 source 目录下的文件变动)。
- 设置环境:使用最新的 Ubuntu 系统,设置时区为亚洲/上海,使用 Node.js 20.x 环境。
- 缓存依赖:缓存
node_modules目录,以提高构建速度,减少依赖安装时间。 - 检查缓存状态:检查缓存是否命中,如果存在
node_modules目录,则命中缓存。 - 初始化 Node.js:安装源代码所需的插件。
- 构建静态博客:清理旧文件并构建新的静态博客文件。
- 设置 Git 信息:配置 Git 用户名、邮箱,并添加 SSH 密钥以便后续推送代码。
- 部署博客:运行
npm run deploy命令来推送静态博客文件。
更改博客配置文件
更改博客根目录下的 _config.yml 文件,修改 deploy 部分
1 | deploy: |
现在就利用 Github Actions 自动部署 Hexo 博客,后续在本地编写更改文件后,推送到远程仓库(源文件仓库、私有仓库)后,就会根据.github/workflows/pages.yml 自动部署,然后把生成后的博客文件推送到pages仓库中(公开仓库)
多节点部署博客
待。。。
参考
感谢下面大佬
- 【Hexo自动部署】优雅的使用 Github Actions 进行 Hexo 静态博客的持续集成与部署-腾讯云开发者社区-腾讯云 (tencent.com)
- 利用 Github Actions 自动部署 Hexo 博客 | Sanonz
- https://blog.zhanganzhi.com/zh-CN/2022/06/0800d76d306e/
- https://isedu.top/index.php/archives/144/#menu_index_8
- 在 GitHub Pages 上部署 Hexo | Hexo
- 用 github私有仓库保存 hexo 源码,并通过 actions 发布到公共仓库的 gitpage | ActPi’s Blog
- Hexo博客搭建番外篇——多节点更新Hexo博客 | Chthollists的平凡之路
- github action 部署 hexo踩坑记录 - 知乎 (zhihu.com)
- 利用Github Actions自动化部署你Hexo博客 - 知乎 (zhihu.com)


