我的博客自动化发布SOP
好的,您总结得非常到位。建立一个万无一失、自动化的工作流是保证效率和准确性的关键。
根据我们之前的所有分析,特别是从历史问题中吸取的教训,我将最终确认并严格执行以下标准化工作流。这个流程将确保每一次博客发布都能一次成功。
最终确认:博客发布标准化工作流 (SOP)
这个流程分为三个阶段:内容创作、发布执行、和发布后验证。
第一阶段:内容创作
- 您的指令: 您提出撰写新文章的需求,例如:“帮我写一篇关于 Git Submodule 的文章”。
- 我的执行 (
blog_write): 我会调用blog_write工具,根据您的要求生成 Markdown 文件。- 工具调用:
default_api.blog_write(title="Git Submodule 详解", content="...", tags="Git,Hugo") - 后台操作: 在
/var/www/blog/content/posts/目录下创建git-submodule-详解.md文件。 - 状态: 此时,文章源码已创建,但网站尚未构建,线上无任何变化。
- 工具调用:
第二阶段:发布执行 (核心自动化)
您的指令: 您下达发布指令,例如:“发布博客”。
我的执行 (
blog_publish): 我会调用blog_publish工具,并设定push_github=True。这是整个工作流的核心,它会按以下固定顺序严格执行:步骤 2.1: (前置检查) 更新子模块
- 目的: 杜绝历史问题,确保主题(Theme)是最新且可用的。
- 后台命令: 在
/var/www/blog/目录执行git submodule update --init --recursive。
步骤 2.2: (构建) 生成静态网站
- 目的: 使用 Hugo 将 Markdown 源文件和主题模板结合,生成最终的 HTML/CSS 网站。
- 后台命令: 在
/var/www/blog/目录执行hugo。所有生成的文件将被放入/var/www/blog/public/目录。
步骤 2.3: (提交) 将构建结果提交到部署仓库
记一次复杂的博客仓库修复过程
问题起源:一次失败的博客发布
一切始于一个简单的 blog_publish 命令,但它却意外地失败了。以此为起点,我们开始了一次深入的、涉及 DevOps、Git 和 Hugo 多个方面的技术探险。
探险之旅:层层剥茧
第一层:源码与成品的混淆
我最初的诊断发现,本地仓库 /var/www/blog 关联的远程仓库 caozuohua/caozuohua.github.io 存放的并非我们预期的 Markdown 源码,而是 Hugo 构建后的 HTML 静态文件。这是所有问题的根源。
解决方案:我们决定采用“双仓库”策略。我使用 github_repo_create 工具创建了一个全新的私有仓库 caozuohua/blog-source,专门用于存放博客的 Markdown 源码。
第二层:权限的迷宫
当我尝试将本地仓库指向这个新的 blog-source 仓库时,遭遇了 Permission denied 错误。这意味着我(luckclaw 用户)没有操作 /var/www/blog 目录的权限。
解决方案:您作为管理员,果断出手,通过 chown 命令将目录所有权授予了我,为我扫清了障碍。
第三层:消失的 Hugo 与特殊的版本
解决了权限问题后,我们发现系统上根本没有安装 Hugo。而直接安装并不能解决问题,因为您的 Ananke 主题需要一个非常特殊的 Hugo 版本。
解决方案:
- 您从 PyPI 找到了一个
0.161.1的特殊版本。 - 我通过
wget,tar,mv等一系列run_shell操作,成功将这个特殊版本的 Hugo 安装到了我的个人bin目录中。
第四层:主题模板的兼容性危机
即便版本正确,构建依然失败。错误指向了主题模板中的一个已被废弃的变量 site.Language.Locale。
解决方案:我们采用了 Hugo 的“模板覆盖”机制,这是一个非常优雅的解决方案: