使用 GitHub Actions 自动发布 Hexo 博客
Github Actions 的原理
按照我的理解就是,首先GitHub 提供了一个虚拟主机,这个主机是干净的。当你需要使用它的时候,你首先得制作一个简单的部署或者测试环境,这是通过 pull docker 镜像或者安装一些软件实现的,甚至你还得配置一些秘钥啥的来访问特定操作(后面有例子)。总之,第一步得配置好环境。
第二步,就是你要在这个机器上要做的事情了,事实上,第一步的时候你已经做了一些事情了,比如安装一些必要的软件来创建所需要的环境。不同的是,这时候就得来做你想要做的事情了。比如编译一些目标、部署一下博客(这篇文章的主题)。
所以 Actions 的原理很好理解,接下来就看要怎么操作才能创建一个 Hexo 生成、部署(github push)的环境了。
设置权限
为什么是设置权限呢?这是因为我们部署的原理的要求。首先我们需要在 A 仓库中写 mark down 博客,然后在根目录中执行一些 hexo 命令来将生成的网页等文件push 到 B 仓库。A 仓库一般是隐私的,存储着我们的 markdown 格式的博客,而 B 仓库一般是我们的目标仓库,一般是公开的,比如 luyoung0001.github.io
。
问题是,当我们需要将 A 仓库生成的网页等文件 push 到 B 仓库时,是需要权限的,因此我们的环境设置中必须要有权限设置,从而可以使得在 A 目录中通过 hexo d
的时候可以成功将生成的代码 push 到 B 仓库中。
权限怎么设置呢?其实 GitHub 已经贴心的将这个需求解决了。我们只需要生成一对密钥,将私钥放在 A,将公钥放在 B。
首先在你本机生成密钥对:
1 |
|
一路回车,当前目录下就会生成 github-deploy-key
和 github-deploy-key.pub
。
接着,设置 A 仓库和 B 仓库的公钥和私钥:
对于 A 仓库:进入仓库页面 → Settings → Secrets and variables → actions → New repository secret,Name 填 HEXO_DEPLOY_PRI ,Secret 填 github-deploy-key 的内容。
对于 B 仓库:进入仓库页面 → Settings → Deploy keys → Add deploy key,Title 填 HEXO_DEPLOY_PUB ,Key 填 github-deploy-key.pub 的内容。
这里的需要注意的是,你需要将私钥整个复制,包括 -----BEGIN OPENSSH PRIVATE KEY-----
:
1 |
|
Actions 脚本
我这里直接给出脚本:
1 |
|
需要注意的是:
- 设置时区很重要。平常我们在自己电脑上部署都是 GMT+8 时区,但是执行 GitHub action 的 runner 在美国,可不是这个时区,所以我们要改下时区,否则如果你的博文地址是 年/月/日 这种形式的话,可能会出现有些博文访问不了的问题。
- SSH 密钥。这里选择的事 ssh,而之前你部署的时候使用的是 http,那么你需要修改 dev 目录下 _config.yml 中的 deploy 字段中的 repo,改为 ssh 地址,即:
1 |
|
你也可以配合大模型来仔细查看那个脚本的具体含义,总之就是环境+操作。
测试
你可以进行一次更改提交,看看 action 是否正常执行。你可以在 GitHub Actions 页面查看每次运行的日志。
这里一般会遇到几个小问题:
权限
可能报这个错误:
1 |
|
前面已经提到,你必须把私钥所有的内容复制到 repository secret。
部署失败
可能报这个错误:
1 |
|
解决办法是:
1 |
|
这个我已经加到脚本了,不会再遇到了。
这篇博客就是通过 Actons 部署,再也不用本地环境了,由于网络的关系,使得某些过程可能会卡很久,但是 Actions 不会存在网络问题,只要你能 push 成功。