利用GitHub Actions+GitHub Pages自动部署Hexo博客
Abstract
将个人博客源文件托管到GitHub,利用GitHub Actions自动生成网页静态文件,利用GitHub Pages部署网站。
Keywords
GitHub Actions、GitHub Pages、Blog、Hexo
Introduction
GitHub Pages可以用来部署静态网站,其中有两种类型的GitHub repository可以用于部署网站:
- [your github name].github.io:如果是这种名字的repo,可以默认调用Github Pages来显示,该repo名字就是网址,可以直接访问,每个GitHub用户只能有一个这种repo;
- 普通的repo:如果是这种网站,需要在repo setting里手动打开Github Pages来生成网站,并且网站的名字比较长。
不过,二者都可以添加custom域名。
Methods
GitHub准备
建仓库
方便起见,我们可以建两个repo,一个是[your github name].github.io用来展示网页,一个是blog用来存放网页源代码。都建成private的!
获取GitHub令牌
可以通过GitHub令牌(Personal Access Tokens)来实现对repo的push。
步骤:GitHub Settings → Developer settings → Personal access tokens → Tokens(classic) → Generate new token → Generate new token(classic)→勾选必要的读写权限(不懂的可以都够上)→ Generate token
记得保存好这个令牌,它不会再次出现。
本地修改
博客部署
[your github name].github.io
在本地博客repo根目录下找到_config.yml,其中的deploy字段修改为:
1 | deploy: |
然后尝试能否push到GitHub Pages:
1 | hexo cl; hexo g; hexo d |
博客托管
blog
1 | git init # 新建 Git 仓库 |
下面还需要其他修改,这里先配置,设置好remote repo,并尝试第一次push,验证是否能成功托管。
配置GitHub Action
1 | mkdir -p .github/workflows/ |
然后将下面代码自己修改一下之后写入hexo_deploy.yml
1 | # 如果想自定义solitude,那就自己fork一份,然后本地就安装自己的主题,然后再提交到自己的仓库 |
- 其中的一些参数自己按自己的仓库需要进行修改!
添加submodule
为了方便GitHub Actions能checkout到托管到GitHub上的开源主题repo(如开源的主题:solitude),这里在本地repo中配置solitude主题为其submodule。下面的Install a submodule中的示例就是要使用的submodule添加命令。
Install a submodule
1 | git submodule add -b <branch_name> <submodule_remote_url> <submodule_local_path> # |
Delete a submodule
1 | git submodule status # 或 git submodule | 显示当前子模块的状态 |
自定义域名
如果有需要的话,可以在GitHub Pages中添加自定义域名,添加之后会对国内访问速度有一定的提升。添加自定义域名的方式如下:
在 Hexo 项目的 source 目录下创建一个 CNAME 文件,内容为你的自定义域名,例如:yourdomain.com
每次 Hexo 生成静态文件时,source 目录中的文件会自动被复制到生成目录(默认是 public),因此 CNAME 文件会被保留在生成的 public 文件夹中。
需要注意的是,由于不论是hexo部署还是GitHub Actions部署,都是强制部署(push -f)的,因此如果仅仅在GitHub端手动修改,那么会将CNAME再次删掉。
开始执行
将本地repo push到GitHub上,并测试能否正常自动化生成并部署博客网站:
1 | git push origin main |
然后到对应GitHub Repo的Actions页面查看自动执行的结果。
发布博客
发布方式
发布方式一:每次写完博客之后,执行
1 | git add -A |
发布方式二:原来hexo的部署方式也能用,但是不会同步本地源代码到blog仓库
1 | hexo cl; hexo g; hexo d |
简化命令
可以利用shell脚本简化,例如:将下面的函数添加到.bashrc/.zshrc中。
1 | hexo |
Results
- [你的名字].github.io 就是最后部署的网站
- blog是网站的源代码
Conclusion
Recursive
原始教程中会把主题文件的git属性删掉,不过这样没有利用git的recursive挺可惜的。此方案还能将主题换成自定义的,只需要自己fork一下开源的主题repo,然后安装主题的时候装自己仓库的repo就好了。非常有利于后期自定义修改。而且有利于项目的分开管理。
References
网站部署
- GitHub Pages:Github王炸功能Pages,免费免服务器上线网站,详细教程_哔哩哔哩_bilibili
- GitHub Actions:利用 GitHub Action 自动部署 Hexo 博客 | 竹山一叶 (zsyyblog.com)
NPM包
- solitude & pug & stylus:Quick Start | Solitude Docs (efu.me)
- abbrlink:ohroy/hexo-abbrlink: create one and only link for every post for hexo (github.com)
- hexo-generator-search:wzpan/hexo-generator-search: A plugin to generate search data for Hexo. (github.com)
- hexo-wordcount:willin/hexo-wordcount: A Word Count Plugin for Hexo (github.com)
- katex:Butterfly 文檔(三) 主題配置 | Butterfly