我来详细对比这两种方式的区别,并给出建议。

问题6:两种方式的区别

方式A:新增一个 CI 工作流

做法:创建一个新的 GitHub Actions 工作流文件(如 deploy-custom-domain.yml),专门用于部署到自定义域名。

维度 说明
BASE_PATH 设置 不注入 BASE_PATH,使用默认值 /
触发条件 可以独立配置(如推送到 custom-domain 分支、手动触发、或定时触发)
部署目标 可以部署到不同的平台(如 Vercel、Netlify、自己的服务器)或同一个仓库的不同环境
代码改动 新增 1 个工作流文件,现有工作流完全不动
并行能力 GitHub Pages 和自定义域名可以同时存在、同时更新
回滚能力 如果自定义域名出问题,GitHub Pages 工作流不受影响,随时可回退

方式B:修改现有工作流的环境变量值

做法:修改现有的 deploy.yml,将 BASE_PATH 的值从 /chunking-blog/ 改为 / 或删除。

维度 说明
BASE_PATH 设置 改为 / 或直接删除该环境变量
触发条件 保持原有触发逻辑(如推送到 main 分支自动部署)
部署目标 只能部署到同一个目标(GitHub Pages)
代码改动 修改现有工作流文件中的 1-2 行配置
并行能力 无法并行。每次推送只能生成一种 base path 的产物
回滚能力 需要再次修改工作流并重新部署,才能切回 GitHub Pages 配置

核心区别对比表

对比项 方式A:新增工作流 方式B:修改现有工作流
GitHub Pages 保留 ✅ 保留,可同时运行 ❌ 被覆盖或需要手动切换
自定义域名并行 ✅ 完全并行 ❌ 互斥,只能二选一
代码改动量 新增 1 个文件(约 30-50 行) 修改 1-2 行
回滚难度 极低,两个工作流独立 需要再次修改配置并部署
部署灵活性 高,可部署到不同平台 低,只能到 GitHub Pages
维护复杂度 稍高,需要维护两个工作流 低,只有一个工作流
适用场景 长期维护两个访问入口 彻底迁移到自定义域名

问题7:哪种方式更好?

推荐:方式A(新增工作流)

理由如下:

评估维度 方式A 方式B
易用性 ⭐⭐⭐ 推送即部署,无需关心环境变量 ⭐⭐ 需要记住当前工作流配置的是哪个环境
稳定性 ⭐⭐⭐ 两个环境独立,互不影响 ⭐⭐ 切换时需要小心,容易误操作
最少代码改动 ⭐⭐ 新增文件,现有代码零改动 ⭐⭐⭐ 只改 1-2 行
长期可维护性 ⭐⭐⭐ 清晰、可扩展 ⭐⭐ 配置容易混乱
风险可控性 ⭐⭐⭐ 随时可回滚到 GitHub Pages ⭐⭐ 回滚需要再次修改并等待部署

关键考量

方式A 的核心优势:保留 GitHub Pages 作为兜底方案

  • 自定义域名可能出现的问题:

    • DNS 解析故障
    • 域名到期未续费
    • SSL 证书问题
    • 备案问题(国内域名)
  • 有了方式A,即使自定义域名出问题,用户依然可以通过 https://stuffren.github.io/chunking-blog/ 访问你的博客。

方式B 的风险:

  • 一旦修改工作流,GitHub Pages 的产物就变成了根路径版本
  • 如果 stuffren.github.io/chunking-blog/ 这个地址还有用户 bookmark 或外链,访问会 404
  • 想恢复 GitHub Pages 版本,必须再次修改工作流并重新部署

最终建议

场景 推荐方式
计划长期同时使用 GitHub Pages + 自定义域名 方式A:新增工作流
彻底弃用 GitHub Pages,完全迁移到自定义域名 方式B:修改现有工作流
想先试用自定义域名,保留回退能力 方式A:新增工作流
追求极简配置,不想维护多个工作流 方式B:修改现有工作流

我的建议:选择 方式A(新增工作流)

虽然多一个文件,但换来了:

  • ✅ 两个环境并行运行
  • ✅ 零风险回滚
  • ✅ 未来扩展更灵活(如再添加其他部署目标)

这符合《方案》的设计哲学:环境隔离、零代码改动、风险可控