Hexo使用Github Action实现持续集成

我最近决定在 GitHub 上利用 GitHub 的 Action 构建一个稳定且一直能存在的博客，国内访问不一定快，但胜在一直都有。

但是，如果采用传统方法推送博客到 GitHub 站点仓库的话，这意味我需要每次更新博客都需要重新 Git 推送站点。

当然，这对于本地 md 文件写博客的人来说倒也没什么。但不幸的是，我自建了 Qexo 作为在线编辑器，显然传统的部署方式肯定是不行的。在之前，我一直发愁这个问题。

直到后来我在用 GitHub Action 来续订微软 e5 的时候突然才想起不是还有这东西么，于是去用它建立了一个全自动部署的 GitHub 托管站点

Step.1 本地运行检查

在进行部署之前，首先我们要确保站点本地是能顺利运行并且能够生成正常的静态站点文件。

部署一个 Hexo 博客（部署 Hexo 请参考 Hexo.io 的官方文档）

部署完成后，在站点根目录下运行如下指令（指令可简写为 hexo s）

Copy
hexo server

访问http://localhost:4000 后，在确保站点能够顺利正常显示内容并且运行正常后，再运行如下指令检查站点静态文件是否生成正常（hexo clean 不可简写，但 hexo generate 可简写为 hexo g）

Copy
hexo clean && hexo generate

如果能够生成正常，再运行一次 hexo clean 清除静态文件，本地运行检查步骤就完成了。

Step.2 配置文件

关于如何将仓库上传至 GitHub，请自行查询资料，此处只介绍上传后的相关配置

首先先确认 Hexo 的配置文档 config.yml 有如下配置

Copy
deploy:
type: git
repository: git@github.com:yzsong06/Demo.git
branch: main

此处 Repository 请自行设置为你的 GitHub Pages 仓库，例如 xxx.github.io 注意使用 SSH 地址！

Step.3 生成密钥

对于一些用户……

对于 Windows10 用户，可在 Store 商店安装 Ubuntu

对于安卓用户，可安装 Termux 并安装 OpenSSH

对于 Linux 用户，呃…… 你都用 Linux 了应该懂（Doge）

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

这将会在当前目录生成两个文件：
github-deploy-key —— 私钥

github-deploy-key.pub —— 公钥

我们把私钥放到我们存放 Hexo 原始文件的代码仓库里面，用于触发 Actions 时使用。
把公钥放到 GitHub Pages 对应的仓库里面，并开启 Action 的写入权限，用于 Hexo 部署时的写入工作。

配置私钥：

在 GitHub 上打开保存 Hexo 的仓库，访问 Settings -> Secrets -> New secret

然后在名字（Name）部分填写：HEXO_DEPLOY_KEY
，一定要注意大小写，这个后面的 GitHub Actions 用的到，一定不能写错。

然后在 Value 的部分填入 github-deploy-key 中的内容

配置公钥：

接下来我们需要访问存放网页的仓库，也就是 Hexo 部署以后的仓库，比如：Username.github.io 这种，访问 Settings -> Deploy keys

按 Add deploy key 来添加一个新的公钥

在 Title 中输入：HEXO_DEPLOY_PUB 字样，当然也可以填写其它自定义的名字，这里只是备注。

在 Key 中粘贴 github-deploy-key.pub 文件的内容

勾选 Allow write access 来打开写权限，否则会无法写入仓库导致部署失败

Step.4 建立 Workflow

首先在 Hexo 的仓库中创建一个新文件 .github/workflows/push.yml
，文件名可以自己取，但是一定要放在

.github/workflows目录下，也可使用Action的新建功能建立文件，文件内容如下

Copy
name: 部署站点

on:
push:
branches: [ "main" ]

jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16.x]

steps:
- uses: actions/checkout@v1

- name: 设置为 Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}

- name: 配置环境变量
env:
HEXO_DEPLOY_PRI: ${{secrets.HEXO_DEPLOY_PRI}}
run: |
mkdir -p ~/.ssh/
echo "$HEXO_DEPLOY_PRI" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
git config --global user.name "yzsong06"
git config --global user.email "yzsong06@outlook.com"
- name: 安装部署时运行环境
run: |
npm i -g hexo-cli
npm i hexo-deployer-git --save
npm i
- name: 生成站点静态文件
run: |
hexo clean && hexo generate
- name: 使用hexo-deployer部署站点
run: |
hexo deploy

Step.5 完成

接下来保存文件后一般即可在仓库的 Action 页面看到反馈结果了，Job 出现绿色对号即为部署成功！