博客的持续部署
抛开定义,直观上,持续部署,顾名思义,就是持续不断地去部署,部署自动紧跟代码改变:你的提交了源码修改,部署上就自动更新了。对于我们的博客系统,也就是新建/修改/删除了文章,博客站点就自动更新、修改对应内容。从效果上来说,就是我们不用再去手动 hexo g -d 生成、部署了。
用持续部署,首先提交源码,然后在云端就自动生成(编译)、部署,这个生成、部署的工作是不需要在本地完成的,由github提供的 CI/CD 服务的服务器自动来完成。GitHub 免费提供的这项服务叫做 GitHub Actions。
1. 前提工作
本教程在以下环境搭建。
1 | hexo: 6.3.0 |
1.1创建所需仓库
- 创建
blog仓库用来存放 Hexo 项目 - 创建
your.github.io仓库用来存放静态博客页面
1.2生成部署密钥
1 |
|
一路按回车直到生成成功
当前目录下会有 github-deploy-key 和 github-deploy-key.pub 两个文件。
1.3 配置部署密钥
复制 github-deploy-key 文件内容,在 blog 仓库 Settings -> Secrets and variables -> Actions 页面上添加。
- 在
Name输入框填写HEXO_DEPLOY_PRI。 - 在
Value输入框填写github-deploy-key文件内容。
复制 github-deploy-key.pub 文件内容,在 your.github.io 仓库 Settings -> Deploy keys -> Add deploy key 页面上添加。
- 在
Title输入框填写HEXO_DEPLOY_PUB。 - 在
Key输入框填写github-deploy-key.pub文件内容。 - 勾选
Allow write access选项。
2. 配置workflow
在 blog 仓库根目录下创建 .github/workflows/deploy.yml 文件。
在 deploy.yml 文件中粘贴以下内容。
配置文件
1 | name: CI |
模版参数说明
- name 为此 Action 的名字
- on 触发条件,当满足条件时会触发此任务,这里的
on.push.branches.$.master是指当master分支收到push后执行任务。 - env 为环境变量对象
- env.GIT_USER 为 Hexo 编译后使用此 git 用户部署到仓库。
- env.GIT_EMAIL 为 Hexo 编译后使用此 git 邮箱部署到仓库。
- env.THEME_REPO 为您的 Hexo 所使用的主题的仓库,这里为
sanonz/hexo-theme-concise。 - env.THEME_BRANCH 为您的 Hexo 所使用的主题仓库的版本,可以是:branch、tag 或者 SHA。
- env.DEPLOY_REPO 为 Hexo 编译后要部署的仓库,例如:
sanonz/sanonz.github.io。 - env.DEPLOY_BRANCH 为 Hexo 编译后要部署到的分支,例如:master。
- jobs 为此 Action 下的任务列表
- jobs.{job}.name 任务名称
- jobs.{job}.runs-on 任务所需容器,可选值:
ubuntu-latest、windows-latest、macos-latest。 - jobs.{job}.strategy 策略下可以写
array格式,此 job 会遍历此数组执行。 - jobs.{job}.steps 一个步骤数组,可以把所要干的事分步骤放到这里。
- jobs.{job}.steps.$.name 步骤名,编译时会会以 LOG 形式输出。
- jobs.{job}.steps.$.uses 所要调用的 Action,可以到 https://github.com/actions 查看更多。
- jobs.{job}.steps.$.with 一个对象,调用 Action 传的参数,具体可以查看所使用 Action 的说明。
这里踩的坑有:
1、path: themes/stellar的主题地址忘记换成自己的,导致部署上去之后,所有的html文件均为空文件,并且页面加载不出来。
2、部署成功,但在workflow里deploy那一步有大量报错,说找不到avatar属性,一开始以为是部署流程只识别了_config.theme.yml,所以没有识别_config.yml里设置的avatar,遂修改_config.theme.yml,但没有起作用。
仔细检查发现主题是通过THEME_REPO设置的github连接引入的,而我github上fork的是一个比较早的版本的stellar,本地使用的_config.theme.yml是最新版本的stellar里提供的配置文件。将github上的主题仓库更新至最新版,问题解决。

3、报大量的语法错误

是指定的node_version过低的问题,最新版的stellar不适配12.x的版本,修改为15.x以上即可。
4、报错ERROR Deployer not found: git,需要安装 hexo-deployer-git。
1 | npm install hexo-deployer-git --save |
3. 修改_config.yml里的deploy配置
1 | # Deployment |
4. 配置theme的_config文件
复制一份 使用的theme根目录下的_config.yml,放到 blog 根目录下,名为 _config.theme.yml,如果您已经配置过此文件,只需要把您的复制过来就行。
这里注意需要把网站的基础信息,如头像Avatar、标题Title等设置好。
5.执行任务
写一篇文章,push 到 blog 仓库的 main 分支,在此仓库 Actions 页面查看当前 task。
当任务完成后查看您的博客 https://your.github.io,如果不出意外的话已经可以看到新添加的文章了。