用 github私有仓库保存 hexo 源码,并通过 actions 发布到公共仓库的 gitpage

起始缘由

原本博客的发布方式为:

  1. 在本地部署好 Hexo 博客的运行环境
  2. 通过 [hexo g] 将写好的 Markdown 文件转化为 HTML 文件
  3. 然后用 [hexo d] 把生成的 public 文件夹内所有内容推送到 Github 仓库中

这样直接将生成的可以运行的实际产物(生产版)推送到 GitHub 仓库上,而不是博客源码(开发版),每当本地环境变更或者想在别的电脑上写文章时就麻烦了、必须得重新部署一遍环境,而且也不会留存历史变更记录。详细参见之前的博文:用 hexo + gitpage 搭建博客以及 gitpage 绑定自定义域名

由此想到,何不把博客源码推送到 Github 仓库中,利用 GitHub 来对源码进行版本控制,同时也利于博客未来的维护、更新!以下就是折腾记录。

步骤记录

GitHub Actions 是 GitHub 推出的持续集成服务,入门教程可参考:GitHub Actions 入门教程.

规划为:一个私有仓库 _blog 用于存放博客源码,原公共仓库 [actpi.github.io] 用于存放博客产物 public, 此仓库已启用了 Github Pages 用作博客展示。

  1. 获取 GH_TOKEN
    首先到个人中心设置 Personal access tokens,token 能让 GitHub Actions 构建所在的虚拟系统对发布仓库拥有权限可以进行推送操作。

  2. 设置 Actions Secrets
    新建 _blog 仓库,将本地目录的 hexo 源码推送到_blog 仓库里,然后进到 _blog 仓库的 设置-[secrets and variables]-[Actions]-[secrets]里新建一个名为[ACCESS_TOKEN]的键值项,内容填上一步获取到的 token 值。

  3. Actions 设置
    在博客源码根目录下新建目录 .github/workflows ,然后在其下新建任务文件 deployment.yml

    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
    name: Publish Hexo to gitpage
    on:
    push:
    branches:
    - main # 如果源码与gitpage用同一仓库则修改为hexo源码对应分支
    jobs:
    build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    with:
    ref: main
    - name: Install dependencies
    run: |
    npm install -g hexo-cli # 给虚拟机装上hexo运行环境
    npm install # 安装 package.json 中记录的所有插件
    - name: Generate Hexo site
    run: |
    hexo clean
    hexo generate
    - name: Deploy to B repo
    uses: peaceiris/actions-gh-pages@v3
    with:
    personal_token: ${{ secrets.ACCESS_TOKEN }} # Personal access token
    external_repository: actpi/actpi.github.io # 发布的仓库地址
    PUBLISH_BRANCH: main
    PUBLISH_DIR: ./public
  4. 此时即可愉快的编写 Markdown 文件推送到 github,然后前往源码仓库的 Actions,即可看到自动化任务正在进行,等待一会看到所有任务执行成功,再刷新博客地址https://actpi.github.io既能看到最新的文章页面啦!