hexo与GitHub Actions的集成布署

前言

由于网上的那些关于“hexo与GitHub Actions的集成布署”的文章绝大多数都是布署失败的,少数的是因为不再想试了,所以在这重写一次。(这种布署的缺点和网上那些布署教程失败的主要原因在文章最后的附加提到)

如果没有特别说明,请不要乱修改,如果想改前提是你知道它是干什么用的

前提

  1. 已经在本地搭建好了博客,如果还没有请访问hexo官网:hexo

  2. 如果不知道怎么push到GitHub私有仓库上,则请在网上搜索教程:Google Search,或者下载GitHub Desktop把博客根目录上传就行:GitHub Desktop

    这是上传博客根目录后在GitHub上的内容(GitHub Desktop会自动把非必要的文件或文件夹留在本地,必要的就上传,直接push也是)

开始

  1. 在GitHub上面创建两个仓库,一个是用于展示博客的公有仓库(这里用xxx.github.io代替公有仓库),一个是用于放博客源代码的私有仓库

  2. 在你博客根目录下用 cmd或者 git bash执行(注意修改指令里面的指定内容)

    1
    ssh-keygen -f hexo-deploy-key -C "xxx.github.io"

    执行完后在你本地博客根目录会出现两个文件

    私钥:

    • hexo-deploy-key

    公钥:

    • hexo-deploy-key.pub

私钥

在你的私有仓库里依次点击 Settings -> Secrets -> Actions -> New repository secret

NameDEPLOY_KEYValuehexo-deploy-key里面的全部内容,点击 Add secret就可以了

公钥

在你的私有仓库里依次点击 Settings -> Deploy keys -> Add deploy key

TitleDEPLOY_KEY(Title可以填别的内容),Key填公钥里的所有内容,勾上 Allow write access,最后点击 Add key就可以了

修改

打开博客根目录下的 _config.yml,修改deploy下的repo为ssh格式:(注意修改里面的指定内容)

1
repo: [email protected]:your_github_name/xxx.github.io.git

创建

在博客根目录下找到 .github这个文件夹,在里面创建名为 workflows的文件夹,再在 workflows里面新建一个名为 xxx.yml的文件(xxx可以改成别的名字)

xxx.yml文件里面写入以下内容(注意里面的分支)(如果想自己写可以参考官方文档github

第31行把 xx改成你的GitHub邮箱(用于发送未完成部署的信息)

第32行把 xx改成你GitHub的名字

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
32
33
34
35
36
37
38
39
40
name: Hexo Deploy

on: # 监听私有仓库的分支,如果想监听所有分支则将on: ~ - main改成on: [push]
push:
branches:
- main

jobs:
build:
runs-on: ubuntu-latest
if: github.event.repository.owner.id == github.event.sender.id

steps: # 获取博客源码和主题
- name: Checkout source
uses: actions/[email protected]

- name: Setup Node.js
uses: actions/[email protected]
with:
node-version: '14' # 使用node.js的版本(不要太高)

- name: Setup Hexo
env:
ACTION_DEPLOY_KEY: ${{ secrets.DEPLOY_KEY }} # 获取私钥及布署
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 "[email protected]"
git config --global user.name "xxxx"
npm install hexo-cli -g
npm install
npm install hexo --save

- name: Deploy
run: |
hexo clean
hexo deploy

最后

将内容push到私有仓库Workflows就会自动将博客布署了

看私有仓库的Actions,绿色的是布署成功,红色的是失败

附加

hexo与GitHub Actions的集成布署并不是完美的,比如本站用 hexo-auto-excerpt 这个hexo插件就只生效一半(没有按照我修改的来渲染,只按插件默认的)(可能是插件太老了吧~)(已通过技术手段搞定);触发Workflows进行自动布署时会把全部的文章更新时间都改为布署时的时间,自己再从本地手动布署一次就会恢复正常了(似乎只有第一次部署是这样的)(最近才发现是一直以来不规范操作所造成的,就比如安装了置顶插件,但是就算只有一篇文章用,其他文章开头也要填开不开启。比如开启置顶填hidden: true,不开启的文章也要写hidden: ‘’。分类和标签是例外,如tags: []

PS:全网几乎没有一篇文章提到这个 hexo-pagination插件(本篇文章的Workflows里面有了),没有这个插件是部署不成功的(当然,得排除幸存者偏差)(是hexo-theme-icarus主题的问题,如果部署失败的话可能是要安装hexo-pagination这个插件,从本地安装再push到GitHub就行了)

TIPS:搭配Qexo使用效果极佳

完成

hexo与GitHub Actions的集成布署

https://jeam.org/761615aa.html

作者

Jeam

发布于

2022-01-27

更新于

2022-09-14

许可协议

评论