常规的hexo使用方式如下:
写markdown文件保存->hexo generate生成文件->hexo deploy部署到github仓库->把源文件备份到博客仓库的source分支或者备份到一个私有仓库

利用Github-Actions+Powershell脚本可以把写博客的流程简化为:
写markdown文件保存->打开powershell,输入pushhexo指令完成上面的所有步骤

1 前提

后面的所有内容都假设你已经能正常用hexo deploy布署博客,这表示你的环境已经满足下面几点要求:

  • 有github.io对应的仓库
  • 安装了git且设置了秘钥,能执行常规操作

2 创建一个备份仓库

因为配置文件中有一些敏感信息,所以我选择创建一个私有仓库,过程不表,假设命名为hexo
这里要注意,如果我们安装了主题,并且是从github上clone下来的,那么主题文件夹中(比如themes/next/)会有名为.git的隐藏文件夹用于git同步,需要把它删除,因为我们备份到私有仓库的时候是把主题文件一起备份的(这样才能在自动化部署中保留主题),嵌套的git仓库会报错,当然删除以后就不能用git pull的方式更新主题了。

把本地的博客文件夹上传到hexo私有仓库,并保证.gitignore文件中包含以下几项,避免以前手动生成及部署过的文件也作为源文件上传:

  • node_modules/
  • public/
  • .deploy*/

3 创建Github Actions脚本

创建一个.github/workflows/pages.yml文件(没有目录就先创建目录),这里参考的hexo官方的脚本并稍作修改:

 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
name: Pages #脚本名称

on: push #在push这个操作发生的时候执行脚本,也可以指定分支,默认master

jobs:
  pages:
    runs-on: ubuntu-latest #虚拟环境
    steps:
      - uses: actions/checkout@v2 #uses指令就是用的其它的现成的脚本
      - name: Use Node.js 12.x #name只是提供一个名称
        uses: actions/setup-node@v1
        with:                     #可以用with提供参数信息
          node-version: '12.x'
      - name: Cache NPM dependencies
        uses: actions/cache@v2
        with:
          path: node_modules
          key: ${{ runner.OS }}-npm-cache
          restore-keys: |
            ${{ runner.OS }}-npm-cache
      - name: Install Dependencies
        run: npm install

      #上面的操作都是为了准备环境


      - name: Build #生成
        run: npm run build #这里需要保证你博客根目录下的package.json文件中有这个脚本,没有的话添加一下"build": "hexo generate"
      - name: Deploy
        uses: peaceiris/actions-gh-pages@v3 #这是一个自动化部署到github pages的脚本
        with:
          personal_token: ${{ secrets.HEXO_DEPLOY }} #HEXO_DEPLOY这个名称跟源文件仓库中设置的要对应
          external_repository: ozryan/ozryan.github.io  #添加部署的目标仓库,也就是github.io对应的仓库,由"用户名/仓库名"的方式指定
          publish_dir: ./public #需要发布的文件目录,hexo generate生成的就是./public
          publish_branch: master  # deploying branch 部署的分支,对应我们的external_repository

上面指令用注释进行了简单的说明,列一下需要修改的几个地方: - personal_token:如果设定的秘钥名称不是HEXO_DEPLOY,那么这里也需要修改 - external_repository:改成你自己的源文件备份仓库

4 创建和设置秘钥

我选择的是personal_token,生成方式用文字说明: 在github点击右上角头像->Settings->Developer settings->Personal access tokens->Generate new token,这里随便起一个名字就行,选上repo的所有权限和workflow权限,点击生成,复制秘钥,这个秘钥只显示一次,如果没有保存,重新生成一即可。

设置秘钥: 选择你备份源文件的私有仓库(hexo)->Settings->Secrets->New repository secret,这里命名为HEXO_DEPLOY,跟前面脚本中的名字对应,把秘钥内容复制进去保存。

5 写Powershell脚本进一步简化操作

上面的步骤完成以后,我们仍然需要手动的执行git add,git commit,git push这些操作,这里借助powershell脚本实现简化。

先找开powershell,执行$profile,会显示配置文件位置,打开这个配置文件,添加下面的内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#hexo 备份到github
function pushhexo{
    $currpath=$pwd.path;
    $hexopath="C:\Users\xxx\Documents\GitHub\blog";
    Set-Location $hexopath;
    git add ./;
    git commit -m "script backup";
    git push;
    Set-Location $currpath;
    Write-Output "Push hexo files to github successfully";
}

其中$hexopath="C:\Users\xxx\Documents\GitHub\blog";这一行需要修改路径为你的博客根目录,保存后需要重启powershell才能生效。

到这里,我们就可以在powershell中输入pushehxo实现一键备份和部署了。

6 总结

Github Action实现自动部署,不仅可以简化部署流程,还可以免去本地渲染的机器性能开销。在文章数量越来越多的时候(几百或者几千),hexo渲染就会越来越慢,甚至卡死,利用Github Actions的话,本地只需要负责io传输就行了,渲染由github完成。