同一个Git仓库多个网站,如何减少Vercel/EdgeOne重复构建?用Commit前缀路由发布分支
如果你在一个 Git 仓库里同时维护了多个网站站点(例如:同一个仓库下同时管理中文站和英文站,或者多语言国际化博客),并且把它们分别部署在类似 Vercel、腾讯云 EdgeOne Pages、Cloudflare Pages 等平台上,你大概率会遇到这样一个头疼的问题:
只要你向 GitHub 推送一次代码,所有绑定的站点都会同时被拉起全量构建!
- 明明只更新了一篇中文内容,英文站点也跟着白白跑一次构建;
- 英文站改了一个单词错别字,中文站点也被重新打包上线;
- 如果你习惯在写文章、敲代码的过程中经常推送代码到 GitHub 备份,平台构建额度和免费并发数很快就会被耗尽,甚至触发频控限流。
针对这个场景,本文分享一种不需要依赖平台高级特性、通用性极强且能百分之百自主控制发布时机的轻量解决方案:Commit 消息前缀路由 + 发布分支隔离。
方案设计思路
很多同学首先想到的可能是平台自带的“路径差异检测”(例如 Vercel 的 Ignored Build Step),但这种方式有两个明显弊端:
- 平台兼容性差:不少新兴平台或国内托管服务对路径监听、差异探测的支持不够完善,配置起来容易失效;
- 无法拦截“未完成的草稿”:即便你修改了中文内容,但如果只是中途推送到 GitHub 做备份、文章还没写完,自动化目录监听依然会直接将半成品打包上线。
更灵活的思路是把“构建触发权”掌握在自己手里:
- 分支职责分离:
master分支:主分支,日常写作、代码备份、提交历史全部在这里。cd-zh分支:专门用于触发中文站上线的专属部署分支。cd-en分支:专门用于触发英文站上线的专属部署分支。
- 平台侧绑定专属分支:
- 托管平台的中文项目:监听分支从
master改为cd-zh; - 托管平台的英文项目:监听分支从
master改为cd-en。
- 托管平台的中文项目:监听分支从
- Commit 信息前缀作为“发布指令”:
- 提交信息以
cd-zh开头(如cd-zh: 发布新文章)→ 只推送到cd-zh分支,仅中文站构建; - 提交信息以
cd-en开头(如cd-en: add new post)→ 只推送到cd-en分支,仅英文站构建; - 提交信息以
cd开头(如cd: 全站同步发布)→ 同时更新两个分支,双站同时构建; - 日常普通提交(如
保存草稿、修个样式备份)→ 不更新任何 CD 分支,两个平台零触发、零消耗!
- 提交信息以
GitHub Actions 自动化分发配置
在 GitHub 仓库中创建 .github/workflows/deploy-router.yml,放入以下代码:
1 | |
小技巧(避免分支合并冲突):
脚本中使用的是git push origin master:cd-zh --force,它是直接将 master 的最新指针强制覆盖到发布分支上,把部署分支单纯作为“信号触发器”。这样不管 master 分支怎么变动,部署分支永远不会产生任何 merge 历史冲突。
托管平台控制台配置
代码推送到 GitHub 后,只需到你的托管平台(EdgeOne / Vercel / Cloudflare Pages)控制台做一次极简修改:
- 打开中文站点项目:进入“构建设置 / Git 配置”,将生产分支从
master改为cd-zh; - 打开英文站点项目:将生产分支从
master改为cd-en。
实际使用体验
配置完成后,发布节奏彻底变得可控:
- 平时写文章写到一半,随时
git commit -m "update draft"然后git push,GitHub 只做远程备份,线上网站完全不跑构建,省心省额度; - 中文文章润色完毕,准备发布:此时 GitHub Action 秒级响应,将代码同步至
1
2git commit -m "cd-zh: 发布某某实用小工具介绍"
git pushcd-zh分支,只有中文站点开始构建上线; - 如果同时修改了公共配置、底层主题或双语文章需要一并更新,直接:两个站点同步触发构建。
1
2git commit -m "cd: 全站配置升级"
git push
通过这种“Commit 意图驱动”的分支路由方式,不仅大幅削减了无效构建的次数,也彻底避免了草稿误上线的尴尬。
在完成改造后:
- 解决了文章草稿,提交的时候只要不写 cd 开头的提交消息,就不会触发构建
- 只更新英文网站,就只更新英文站点,不会中英文一起更新。
- 如果要全量更新中文、英文网站,也能轻松控制,提交消息写 cd 开头即可
- 减少了构建次数,避免 vercel、腾讯的构建次数限制
- 为地球节能做出巨大贡献!
- 本技术方案兼容全部平台,不依赖 vercel 的忽略等特效
- 节省了构建额度