使用 GitHub Action 部署 Hexo 博客

承友人所托,故作此文

思路

GitHub Action 可以被推送触发,因此只需要把触发条件写成推送,其余部署命令加以修改即可

操作步骤

分为四个小步骤:

  1. 创建项目,用于存放博客源码以及博客部署生成的文件
  2. 添加部署公钥和私钥,用于部署博客
  3. 增加一个 Action 配置文件,用于让 GitHub Action 读取
  4. 推送博客源码,用于触发 GitHub Action

创建项目

需要创建两个项目,一个项目用于托管博客源码,另一个项目用于托管博客部署生成的文件(如果你不用 GitHub 来托管博客部署生成的文件,可以只创建一个用于托管博客源码的项目)
关于如何托管博客源码到 GitHub,建议看我 上一篇文章

添加部署公钥和私钥到相关项目

如果已经有一对 SSH 公钥和私钥,并且不追求绝对的权限管理的话,可以跳过 生成 SSH 私钥和公钥 这一步。

生成 SSH 私钥和公钥

打开 终端PowerShellTermux 之类的,执行这段

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
name: deploy_my_blog
on: [push]
jobs:
build_and_deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '14.17.5'
- name: Prepare ssh env
run: |
mkdir -p ~/.ssh
echo "$SSH_DEPLOY_KEY" | tr -d '\r' > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan -H 'github.com' >> ~/.ssh/known_hosts
env:
SSH_DEPLOY_KEY: ${{ secrets.HEXO_DEPLOY_KEY }}
- name: Prepare hexo and npm env
run: |
npm install -g hexo-cli
npm install
- name: Prepare git env
run: |
git config --global user.email leao9203@gmail.com
git config --global user.name Leao9203
- name: Deploy Blog
run: |
hexo clean
hexo g
hexo d

其中

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 仗势欺人
于是就有了本文

总结教训:言↗多→必↘失→

参考资料

  1. GitHub Actions 来自动部署 Hexo - Tommy
  2. Features • GitHub Actions - GitHub
  3. 使用 Github Actions 自动构建部署 Hexo 博客 - iaosee
  4. Github Actions 初体验之自动化部署 Hexo 博客 - Razeen`s Blog
  5. ssh下known_hosts的作用 - liuyanerfly - 博客园