使用 GitHub Action 部署 Hexo 博客
承友人所托,故作此文
思路
GitHub Action 可以被推送触发,因此只需要把触发条件写成推送,其余部署命令加以修改即可
操作步骤
分为四个小步骤:
- 创建项目,用于存放博客源码以及博客部署生成的文件
- 添加部署公钥和私钥,用于部署博客
- 增加一个 Action 配置文件,用于让 GitHub Action 读取
- 推送博客源码,用于触发 GitHub Action
创建项目
需要创建两个项目,一个项目用于托管博客源码,另一个项目用于托管博客部署生成的文件(如果你不用 GitHub 来托管博客部署生成的文件,可以只创建一个用于托管博客源码的项目)
关于如何托管博客源码到 GitHub,建议看我 上一篇文章
添加部署公钥和私钥到相关项目
如果已经有一对 SSH 公钥和私钥,并且不追求绝对的权限管理的话,可以跳过 生成 SSH 私钥和公钥
这一步。
生成 SSH 私钥和公钥
打开 终端
或 PowerShell
或 Termux
之类的,执行这段
1 | ssh-keygen -t rsa -b 4096 -C "Hexo Deploy Key" -f github-deploy-key -N "" |
会在当前目录下生成两个文件:github-deploy-key
(部署私钥)和 github-deploy-key.pub
(部署公钥)
添加部署私钥
将已有的 SSH 私钥内容或上一步中生成的部署私钥中的内容复制下来
打开托管博客源码的项目,Settings
- Secrets
或者 Actions secrets
- New repository secret
Name 写成 HEXO_DEPLOY_KEY
,如果改为其他内容,需要在之后的 Action 配置文件中修改为同样的内容。
将复制的内容粘贴到 Value 中,然后 Add secret
添加部署公钥
如果上一步添加的是已有的 SSH 私钥,并且已经添加到了相关的项目上,可以跳过这一步了
如果上一步添加的是生成的 SSH 私钥,或者是没有将已有的 SSH 公钥添加到相关的项目上,请继续看
将已有的 SSH 公钥内容或部署公钥的内容复制下来
打开托管博客部署文件的项目,Settings
-Deploy keys
-Add deploy key
Title 可以随意填写,也可以填写HEXO_DEPLOY_PUB
(选择困难人士福音)
将复制的内容粘贴到 Key 中,勾选上Allow write access
,然后Add key
增加一个 Action 配置文件
在 博客目录/.github/workflows/
新建一个 deploy.yml
,填入 Action 的配置信息
一个模板:
1 | name: deploy_my_blog |
其中
on: [push] 意为推送时触发
runs-on: ubuntu-latest 是说运行环境为最新的 Ubuntu,根据 GitHub 的文档 是可以修改为其他运行环境的
node-version: ‘14.17.5’ 指的是 node.js 版本号,可以按需求改为其他版本号
ssh-keyscan -H ‘github.com’ >> ~/.ssh/known_hosts 中的github.com
是 ssh 连接的服务端的公钥名称,如果不用 GitHub 托管博客部署生成的文件可以修改为其他值
SSH_DEPLOY_KEY 中的HEXO_DEPLOY_KEY
就是添加到博客源码项目中 Secret 的 Name
git config –global user.email 是 git 的全局邮箱,可以修改为其他值,比如将leao9203@gmail.com
修改为leao9203@qq.com
git config –global user.name 是 git 的全局用户名,可以修改为其他值,比如将Leao9203
修改为LeaoDuan
修改完之后,将博客源码推送到 GitHub,这一次推送不会触发部署。
推送博客源码
更新博客之后进行一次推送。理论上你也可以直接在 GitHub 上更新,不嫌麻烦的话(
可以看到在 GitHub 上不出一分钟就已经部署好了
在博客的部署项目上也能看到已经更新了
后记
其实用 GitHub Action 是我在和朋友聊天时无意间提起的
本来是不想写的,但奈何他是群主呢(实名检举 krau 仗势欺人
于是就有了本文
总结教训:言↗多→必↘失→