使用 Github Action 自动部署 Hexo 并在线编辑文章

使用 Github Action 自动部署 Hexo 并在线编辑文章

2021 年 十月 28 日 星期四 18 点 11 分
博客


跳到主要内容

前言

就在昨天,Masle 给我推荐了 HexoPlusPlus,一开始我还不是很明白。在仔细看了 HexoPlusPlus 的文档后,想到社团的博客有了这个会很方便。
为什么呢?主要是整个社团统计下来有电脑的没有多少人。像平时一样去发布文章,虽然可以在任何地方用文本编辑器写,但是要发布就得在电脑上用 Git 了,但是就我现在电脑上的 Git 来说,因为登陆了多个账户,导致上传经常会报错,社团的话不能指望他们能够自行解决。因此,配置 Github Action 来自动部署就很有必要,而且也会变得很方便。
但是光配置 Github Action 还不够,GitHub 对某些人来说还不够好用,而且有时还会打不开,因此就通过 HexoPlusPlus 来更好的管理文章。

曾经我还想过在手机上用 Termux 安装 Ubuntu 然后安装 Git、Node.js、VScode,使得能够在手机上编辑博客。然后……我输了,在网页中打开浏览器输入密码登录到 VScode 后就白屏了,手机并没有卡,浏览器也没有卡,用的同是微软家的 Microsoft Edge。对此也查了不少方法,没有一点作用,只好作罢。

配置 Github Action

Github Action 用起来像是在用一台远程的电脑,可以自选操作系统,也可以很方便的安装运行环境,但是“这台电脑”用完就会被销毁,需要时重新被创建。

上传博客源代码到 Github

若要使用 Github Action 和 HexoPlusPlus,就必须将博客源代码(根目录)上传到 Github。
在我的方法中,既可以上传到网站仓库的分支中,也可以上传到其他的仓库,可以是私有仓库。

具体上传方法就不多说了,这里我因为登陆了太多账户,Git 有点异常,就通过 Github Desktop 来创建仓库,并将仓库克隆下来,把 “.git”文件夹复制到博客根目录下。然后在 Github Desktop 中添加本地仓库,把博客根目录添加进去。

接着我们需要在博客根目录找到或创建 .gitignore 文件,将其内容修改为:

.gitignore
public/
.deploy*/

意思是不上传“public”和“.deploy_git”文件夹。

隐患!
由于没有上传“.deploy_git”文件夹,每次自动部署博客时,都会当作第一次发布并强制推送。

目前仅发现该操作产生的不良反应:

  • 若文章内未填写 updated 属性,文章的更新日期将会是自动部署时的日期。(对于 Butterfly 主题,导致“最新文章”栏目中一直出现旧的文章)

最后将博客上传到 Github 仓库中。

设置自动部署

更改 Hexo Depoly 设置

打开博客根目录下的 _config.yml 文件。
将 depoly 中的 repo 仓库链接更改为 SSH 链接。

yml
# Deployment
## Docs: https://hexo.io/docs/one-command-deployment
deploy:
type: git
repo: git@github.com:JonnyJong/Jonnys.git
branch: main
可在此处复制SSH链接
可在此处复制SSH链接

你会看见 Github 提示你 “You don't have any public SSH keys in your GitHub account. You can add a new public key, or try cloning this repository via HTTPS.”。所以接下来我们来创建 SSH 密钥。

创建并配置 SSH 密钥

对于 macOS 和 Linux,直接自行下面的指令,Windows 则需要先开启 Git Bash(安装 Git 会附带 Git Bash)然后运行下面的指令。

bash
ssh-keygen -t rsa -b 4096 -C "Hexo Deploy Key" -f github-deploy-key -N ""

运行之后可以在你的用户目录(Home)下找到两个文件,分别名为 github-deploy-keygithub-deploy-key.pub

接着来到存放博客源代码的仓库,点击SettingsSecretsNew repository secret

Secrets 设置页面
Secrets 设置页面

Name 处填写 HEXO_DEPLOY_KEYValue 处填写 github-deploy-key 文件中的内容。然后点击 Add secret

来到存放博客网页(Hexo depoly)的仓库,点击SettingsDeploy keysAdd deploy keys

Deploy Keys 设置页面
Deploy Keys 设置页面

Title 处填写 HEXO_DEPLOY_PUBKey 处填写 github-deploy-key.pub 文件中的内容,然后勾选 Allow write access,最后点击 Add Key

配置 Github Action 工作流

接着在博客根目录下新建 .github 文件夹并在 ".github" 文件夹中新建 workflows 文件夹,最后在 “workflows” 文件夹中新建一个任意名称的 .yml 格式的文件。

文件目录
文件目录

在其中填写如下内容。需要将第 19 行的 example@example.com 换成你的 Github 登录邮箱,将第 20 行的 example 换成你的 Github 名称。

yml
name: Build and Deploy
on: [push]
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
persist-credentials: false
- name: Install and Build and Depoly 🔧
run: |
mkdir -p ~/.ssh/
echo "$ACTION_DEPLOY_KEY" > ~/.ssh/id_rsa
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
git config --global user.email "example@example.com"
git config --global user.name "example"
npm install hexo-cli -g
hexo clean
hexo g
hexo d
env:
ACTION_DEPLOY_KEY: ${{ secrets.HEXO_DEPLOY_KEY }}
CI: false

接下来,我们再将博客根目录上传到仓库,就可以等着看效果了。

当出现 Github Action 页面出现类似下面的内容就表示成功了。

Github Action 页面
Github Action 页面

前往博客网页的仓库(分支)可以看到已经更新了。

已经自动更新
已经自动更新

配置 HexoPlusPlus

接下来配置 HexoPlusPlus,官方的文档说的很清楚,配置方法看官方的文档就足够了。

22.06.22 更新:

Qexo

相比 HexoPlusPlus,我认为 Qexo 会更好用,界面也更加美观,而且 HexoPlusPlus 已经停止维护了。

参考与引用

  • 快速上手 | HexoPlusPlushttps://hexoplusplus.js.org/start/
  • GitHub Actions 来自动部署 Hexo - 知乎https://zhuanlan.zhihu.com/p/170563000
  • 【干货】Luke教你20分钟快速搭建个人博客系列(hexo篇) | 自动化部署在线编辑统统搞定 | 前端必会!_哔哩哔哩_bilibilihttps://www.bilibili.com/video/av626367723/