我来详细对比这两种方式的区别,并给出建议。
问题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(新增工作流)。
虽然多一个文件,但换来了:
- ✅ 两个环境并行运行
- ✅ 零风险回滚
- ✅ 未来扩展更灵活(如再添加其他部署目标)
这符合《方案》的设计哲学:环境隔离、零代码改动、风险可控。