如何在GitHub单仓库实现Git持续部署及EFCore部署配置变更管理
可行实现方案
1. 固定分支权责划分
提前明确各分支的存储边界,避免不同类型代码混存:
development开发主分支:仅存储业务代码、开发环境配置,永远不包含Migrations文件夹、正式环境数据库配置代码,Program.cs中保留Database.EnsureDeleted()/Database.EnsureCreated()开发逻辑live-config部署配置专属分支:仅存储两类变更:①Program.cs中替换为Database.Migrate()的正式环境数据库初始化代码;② 历史所有EFCore Migrations文件夹及文件,不存储任何业务代码变更preparation临时部署中转分支:每次部署时创建/重置,用完可删除,用于叠加配置、生成迁移cd-test持续集成测试分支:存储待测试的完整可部署代码cd-live生产环境部署分支:存储已验证的正式上线代码
2. 标准化部署操作流程
完全匹配你预期的流程,每步对应可直接执行的Git操作:
- 每次发起部署前,拉取最新开发分支代码,重置中转分支:
git checkout development git pull origin development git checkout -B preparation
- 叠加部署专属配置,合并时优先保留开发分支的业务代码,仅同步
live-config的配置和迁移文件:
# 首次合并需要加--allow-unrelated-histories,后续不需要 git merge -X ours live-config --allow-unrelated-histories
合并完成后会自动完成两个操作:Program.cs 替换为带Database.Migrate()的正式版逻辑、Migrations文件夹自动恢复所有历史迁移文件,无需手动操作。
3. 在preparation分支运行Add-Migration [本次迁移名称],同步开发阶段的数据库变更,验证迁移逻辑无误即可。
4. 把新生成的迁移和配置变更同步回live-config分支,仅提交部署相关文件,不提交业务代码:
git checkout live-config # 仅拣选preparation分支中的配置和迁移文件变更 git checkout preparation -- Program.cs Migrations/ git add Program.cs Migrations/ git commit -m "chore: 新增[本次迁移名称],更新部署配置" git push origin live-config
- 把完整的可部署代码推送到测试分支验证:
git checkout preparation git push -f origin preparation:cd-test
- 测试通过后合并到生产分支上线:
git checkout cd-live git merge cd-test git push origin cd-live
- 部署完成后可删除本地
preparation分支,下次部署重新创建即可。
3. 注意事项
- 开发分支可以配置提交校验规则,禁止提交Migrations文件夹和正式环境配置代码,避免误提交破坏分支隔离
live-config分支永远不要合并开发分支的代码,所有变更都只能从preparation分支拣选配置和迁移文件,保证该分支仅存部署相关增量变更- 注意修正拼写错误,正式环境的数据库初始化方法为
Database.Migrate(),避免运行报错
内容的提问来源于stack exchange,提问作者John Mackerras
相关产品推荐
相关产品推荐

