技术博客架构升级:解锁高效写作新体验

02613-1859109621-a beautiful girl,holding a book in hand,highly detailed,ultra-high resolutions,32K UHD,best quality,masterpiece,_resized.png

最近我对自己的技术博客架构做了一次重要升级,实现了文章内容与静态网站生成器的完全解耦。这个方案让写作回归纯粹,同时保持了自动化部署的优势。以下是具体的实现方案:

🛠️ 方案架构

  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
          )

上述代码展示了核心工作流的详细配置,通过精确的定时任务和细致的变更检测,确保文章同步的准确性和高效性。

如下图,文章的目录已经变成子模块
[站外图片上传中...(image-1ecf71-1738907893118)]

🌟 方案优势

关注点分离

在写作过程中,我们只需将全部精力聚焦于 blog-articles 仓库,无需再为其他无关事务分心。而主仓库则始终保持整洁有序,仅包含静态网站生成器的必要配置,大大提高了管理效率。

智能同步机制

该方案采用每日定时增量同步(UTC 0 点)的方式,就像一个精准的时钟,按时完成文章的同步工作。同时,通过精准的 diff 检测,能够敏锐地捕捉到文章的细微变化,避免了无效构建,节省了大量的时间和资源。此外,还支持手动触发即时同步,满足了特殊情况下的紧急需求。

🔧 实现注意事项

为了确保方案的顺利实施,我们需要遵循特定的目录结构规范。

blog-articles/
├── 2023
│   ├── tech-article.md
│   └── life-article.md
└── 2024
    └── new-feature.md

按照年份对文章进行分类存放,不仅方便查找和管理,还能使整个仓库的结构更加清晰明了。

🚀 升级体验

自从采用了这一创新方案,我的写作效率得到了显著提升。现在,我可以通过 VS Code 的 Markdown 插件直接向文章仓库提交修改,再也不用担心会误触静态网站生成器的配置。自动同步机制更是贴心至极,为我节省了手动操作时间,让我真正实现了 “写后即忘” 的理想写作状态,全身心地投入到创作中去。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 用到的组件 1、通过CocoaPods安装 2、第三方类库安装 3、第三方服务 友盟社会化分享组件 友盟用户反馈 ...
    SunnyLeong阅读 14,989评论 1 180
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,282评论 19 139
  • 第 3.8 章 优秀 workflow 推荐 Workflow 中文的意思是工作流,它表示把多个事件联合在一起,形...
    奶茶大叔阅读 5,622评论 0 1
  • 英文原版:https://github.com/vinta/awesome-python中文版:https://g...
    会灰的大飞狼阅读 8,971评论 1 56
  • Python资源大全中文版,包括:Web框架、网络爬虫、模板引擎、数据库、数据可视化、图片处理等,由伯乐在线持续更...
    dxl1236阅读 10,195评论 2 33

友情链接更多精彩内容