博客 / 詳情

返回

技術博客架構升級:解鎖高效寫作新體驗

最近我對自己的技術博客架構做了一次重要升級,實現了文章內容與靜態網站生成器的完全解耦。這個方案讓寫作迴歸純粹,同時保持了自動化部署的優勢。以下是具體的實現方案:

🛠️ 方案架構

  1. 主倉庫flowstone/flowstone.github.io
    主倉庫僅保留靜態網站生成器的相關配置,果斷移除了所有文章內容。如此一來,主倉庫更加簡潔,專注於網站生成的核心配置工作,為後續的自動化部署奠定堅實基礎。
  2. 文章倉庫flowstone/blog-articles
    文章倉庫則全心全意地承擔起存放 Markdown 格式博文的重任。它就像一個專屬的知識寶庫,讓每一篇文章都能在自己的 “小天地” 裏有序存放,便於管理和維護。
  3. 自動化橋樑: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 插件直接向文章倉庫提交修改,再也不用擔心會誤觸靜態網站生成器的配置。自動同步機制更是貼心至極,為我節省了手動操作時間,讓我真正實現了 “寫後即忘” 的理想寫作狀態,全身心地投入到創作中去。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.