如何在Bitbucket环境下将db_changes.sql排除合并至main分支
问题:Bitbucket Cloud下PR分支数据库变更脚本的合并排除方案
环境说明
我们使用Bitbucket Cloud进行仓库管理及合并操作,Jenkins用于CI/CD流程。存在开放拉取请求(PR)的分支会被构建并部署至临时环境(包含当前已部署的数据库schema和数据快照),在此环境中执行集成测试。main分支的处理流程类似,但还会被部署至供QA等使用的“永久”环境,这一流程通过Jenkins脚本自动完成。
在PR获得必要审批且上述构建/部署流程通过后,由开发人员在Bitbucket UI中执行向main分支的合并操作。
问题描述
部分PR同时需要修改代码与数据库。若数据库schema与代码预期不符,或缺失关键数据,集成测试将失败。
拟采用方案
我们希望使用特定变更的SQL脚本,在集成测试运行前,将所需的数据库变更应用到临时构建环境的数据库快照中。
一种便捷方案是在仓库中保留一个占位文件db_changes.sql,开发人员可在功能/修复分支中修改该文件,构建/部署脚本会随分支其他内容一同读取该文件,但需将其排除在向main分支的合并之外。这样能确保从main分支拉取新分支时,db_changes.sql为空文件,当代码无需数据库变更时不会执行相关操作。
当前问题
使用git attributes指定该文件合并策略的常规方法在Bitbucket上无法生效。
备选方案探讨
- 一种思路是修改默认合并选项(若Bitbucket支持)为
recursive,理论上可允许使用git attributes设置合并策略。但recursive的速度明显慢于ort。 - 另一种选项是为每个分支使用单独的数据库变更脚本,通过命名规则将文件名与分支名关联,但这种方式可靠性低,易出现拼写错误。
补充:约束与限制
我们是大公司中的小型团队,无法选择“更优”工具,只能基于现有工具Bitbucket Cloud(计划迁移至Github)和Jenkins寻求解决方案,恳请提供建议。
内容的提问来源于stack exchange,提问作者Alex O
相关产品推荐
相关产品推荐

