咨询:基于master的特性分支合并至dev与master分支的其他弊端
结合Azure数据平台的多产品特性,除了两次合并冲突的问题,你的策略还存在以下几个明显弊端:
特性分支与生产主干的兼容性风险:特性分支基于master创建后,若开发周期较长,master可能已经合并了其他已上线的特性。此时你的特性分支不仅会面临更严重的合并冲突,还可能与master中新增的生产代码存在逻辑兼容性问题——比如Azure Synapse的脚本依赖了新的SQL DB表结构,而你的特性分支仍基于旧表开发,在dev环境测试时因为dev分支还没同步master的新表,不会暴露问题,合并到生产后直接报错。
长期development分支的环境污染问题:dev作为所有未上线特性的集中地,会同时存在多个处于测试阶段的代码变更。一旦某个特性引入严重bug(比如ADF管道的死循环导致资源耗尽),会直接导致整个DEV/TEST环境不可用,其他开发者的特性验证工作全部停滞。此外,dev分支的代码历史会因为大量临时合并变得混乱,难以快速定位问题根源。
重复测试与部署的冗余成本:特性在dev环境测试通过后,合并到master前如果需要修改bug,这些修改并未在master的上下文环境中做过验证,等于要重新执行一次生产级别的兼容性测试。加上Azure数据平台的部署涉及ARM模板、资源配置等环境差异项,两次部署的验证逻辑重复,大幅降低CI/CD的效率。
分支生命周期管理的混乱:每个特性需要维护两个PR(到dev和到master),当团队规模大、特性数量多的时候,很容易出现跟踪遗漏——比如某个特性已经合到dev测试通过,但迟迟未发起master的PR,导致生产环境落后于dev;或者误将已过时的特性分支版本合并到master,引发生产代码不一致的问题。若采用fork模式,开发者还容易忽略同步上游master到个人fork,进一步加剧分支差异。
生产部署的原子性无法保障:多个特性在dev环境测试通过后,合并到master时可能存在依赖冲突。比如Feature A依赖Feature B的功能,但Feature B先合并到master,而Feature A还未合并,会导致生产环境中Feature B的功能无法正常使用;或者两个独立特性合并时,代码冲突解决后出现逻辑上的不兼容,而这种问题在dev环境因为两个特性同时存在不会暴露。
内容的提问来源于stack exchange,提问作者Cedersved

