2026 年最新!Obsidian + Github Pages + Github Actions 自动化部署博客全攻略

在 2023 年的时候我写了一篇[[Obsidian + Hexo + Github Pages + Github Actions 自动化部署博客]] 的文章,里面介绍了一下利用 Github Actions + Obsidian 进行静态博客部署的文章,现在看来存在很多的问题,比如说在 Obsidian 仓库的 Acitons 比较复杂,于是修改一下逻辑,将主要的 Actions 放到了 hexo-template 仓库,从而如果出现模板仓库需要更换、迭代、大修时,只需更换新的仓库,以及新的仓库即可,甚至不需要修改 Obsidian 中的 Acitons,对原本的架构进行了解耦。

将部署相关的内容完全存储在部署模板仓库,在部署模板仓库编译完成后,直接推送到Pages 仓库,具体逻辑如下图:

sequenceDiagram
# 明确标注3个独立仓库 + 本地电脑 + Pages服务
participant Local as 本地电脑
participant Repo1 as 仓库1:Obsidian笔记仓库(仅存.md)
participant Repo2 as 仓库2:部署模板仓库(仅存Actions脚本)
participant Repo3 as 仓库3:Pages静态文件仓库(仅存.html)
participant Pages as GitHub Pages服务(指向Repo3)

# 可选触发:本地推送笔记才执行后续流程
opt 本地推送Obsidian笔记触发部署
    Local->>Repo1: git push 推送修改后的.md笔记
    # 跨仓库触发:笔记仓库调用部署仓库的Actions
    Repo1->>Repo2: 触发 repository_dispatch 事件(obsidian-content-update)
    # 激活部署仓库,开始执行部署脚本
    activate Repo2
        Repo2->>Repo1: git pull 拉取Repo1最新的.md笔记
        Repo2->>Repo2: 执行脚本,将.md转换为.html静态文件
        Repo2->>Repo3: git push 推送生成的.html到Repo3的main/gh-pages分支
        # Pages服务监听Repo3的指定分支,更新后自动发布
        Repo3->>Pages: 分支内容更新,触发Pages服务同步
        Pages->>Pages: 加载Repo3的.html文件,对外发布可访问的网页
    # 部署完成,停用部署仓库的执行状态
    deactivate Repo2
end

在这次改造后,如果切换部署相关内容模板,可以修改部署模板,如果仓库名不进行改变的话甚至可以不修改 Obsidian 仓库,只修改 模板仓库即可。

我 Obsidian 仓库的 Github Actions 只做了最基础的触发功能。

name: trigger-hexo-build

# Obsidian内容变更时,触发Hexo模板仓库的主流程

on:

push:

branches:

- master

env:

HEXO_TEMPLATE_REPO: Eeymoo/obsidian2hexo-template # Hexo模板仓库

  

jobs:

trigger-hexo:

runs-on: ubuntu-latest

steps:

- name: Trigger Hexo Template Build

uses: peter-evans/repository-dispatch@v3

with:

token: ${{ secrets.SERVICE_ACCOUNT_KEY }} # 有触发权限的密钥

repository: ${{ env.HEXO_TEMPLATE_REPO }}

event-type: obsidian-content-update

# 传递触发信息(便于调试)

client-payload: |

{

"obsidian_ref": "${{ github.ref }}",

"obsidian_sha": "${{ github.sha }}",

"triggered_by": "Obsidian content update"

}

整体部署功能实在 部署仓库 中,当前是 Hexo ,后续我可能会使用其他支持 mdx 的静态部署功能。

这样就见我我们的 Obsidian 仓库与部署仓库隔离,可以将 Obsidian 仓库隐藏,保持可以保证一定的信息隔离,当然数据联网就不是绝对安全的。