最近我對自己的技術博客架構做了一次重要升級,實現了文章內容與靜態網站生成器的完全解耦。這個方案讓寫作迴歸純粹,同時保持了自動化部署的優勢。以下是具體的實現方案:
🛠️ 方案架構
- 主倉庫:
flowstone/flowstone.github.io
主倉庫僅保留靜態網站生成器的相關配置,果斷移除了所有文章內容。如此一來,主倉庫更加簡潔,專注於網站生成的核心配置工作,為後續的自動化部署奠定堅實基礎。 - 文章倉庫:
flowstone/blog-articles
文章倉庫則全心全意地承擔起存放 Markdown 格式博文的重任。它就像一個專屬的知識寶庫,讓每一篇文章都能在自己的 “小天地” 裏有序存放,便於管理和維護。 - 自動化橋樑:GitHub Actions 工作流
每日定時同步文章變更,實現自動構建部署
⚙️ 核心工作流配置
添加了同步文章工作流sync-articles.yml
name: Content Sync Automation
on:
push:
branches: [main]
schedule:
- cron: '0 0 * * *' # 每天UTC時間0點同步
workflow_dispatch:
jobs:
sync-content:
runs-on: ubuntu-latest
steps:
- name: Checkout Main Repo
uses: actions/checkout@v3
with:
persist-credentials: false
- name: Sync Articles Repo
uses: actions/checkout@v3
with:
repository: flowstone/blog-articles
path: content/posts
token: ${{ secrets.GITHUB_TOKEN }}
- name: Configure Git
run: |
git config --global user.name "Automation Bot"
git config --global user.email "bot@flowstone.dev"
# Check if content/post already exists and is a submodule
- name: Check if submodule exists
id: check_submodule
run: |
if [ -d "content/post/.git" ]; then
echo "Submodule already exists"
echo "exists=true" >> $GITHUB_ENV
else
echo "Submodule does not exist"
echo "exists=false" >> $GITHUB_ENV
fi
# If content/post is not a submodule, add it as a submodule
- name: Add submodule if not exists
if: env.exists == 'false'
run: |
git submodule add https://github.com/flowstone/blog-articles content/post
git submodule update --init --recursive
git commit -m "Add blog articles repository as a submodule"
git push origin main
# Sync articles if there are changes
- name: Sync articles
if: env.exists == 'true'
run: |
# 拉取遠程子模塊更新
git submodule update --remote content/post
# 檢查是否有更改,如果有更改則提交
git diff --exit-code content/post || (
git add content/post
git commit -m "Sync articles from new repository"
git push origin main
)
上述代碼展示了核心工作流的詳細配置,通過精確的定時任務和細緻的變更檢測,確保文章同步的準確性和高效性。
如下圖,文章的目錄已經變成子模塊
🌟 方案優勢
關注點分離
在寫作過程中,我們只需將全部精力聚焦於 blog-articles 倉庫,無需再為其他無關事務分心。而主倉庫則始終保持整潔有序,僅包含靜態網站生成器的必要配置,大大提高了管理效率。
智能同步機制
該方案採用每日定時增量同步(UTC 0 點)的方式,就像一個精準的時鐘,按時完成文章的同步工作。同時,通過精準的 diff 檢測,能夠敏鋭地捕捉到文章的細微變化,避免了無效構建,節省了大量的時間和資源。此外,還支持手動觸發即時同步,滿足了特殊情況下的緊急需求。
🔧 實現注意事項
為了確保方案的順利實施,我們需要遵循特定的目錄結構規範。
blog-articles/
├── 2023
│ ├── tech-article.md
│ └── life-article.md
└── 2024
└── new-feature.md
按照年份對文章進行分類存放,不僅方便查找和管理,還能使整個倉庫的結構更加清晰明瞭。
🚀 升級體驗
自從採用了這一創新方案,我的寫作效率得到了顯著提升。現在,我可以通過 VS Code 的 Markdown 插件直接向文章倉庫提交修改,再也不用擔心會誤觸靜態網站生成器的配置。自動同步機制更是貼心至極,為我節省了手動操作時間,讓我真正實現了 “寫後即忘” 的理想寫作狀態,全身心地投入到創作中去。