我们的项目是多模块 Maven 项目。该项目依赖于另一个多模块 maven 项目。poms 的关系(聚合和继承)就像
parent-super-pom
|---parent-module-1
|---parent-module-2
|---parent-module-3
|---...
|---parent-module-n
|---child-super-pom
|---child-module-1
|---child-module-2
|---child-module-3
|---child-module-4
项目中的所有parent
内容都由一个单独的团队管理,我们称之为framework
. 项目中的所有child
内容都由我们的团队管理,我们称之为product
.
现在framework
已升级为spring-boot
与许多其他重大更改一起使用。我们需要开始开发以升级product
以使用framework
最新的技术。这个升级过程大约需要一个月的时间(有很多无法编译的提交),因为需要注意很多更改才能使应用程序正常工作。同时,product
也将在旧的 Maven 环境中自行开发功能。处理这种情况的最佳方法是什么?
我们使用 Gerrit 代码审查。更改首先推送到 gerrit,有自动 jenkins 作业触发器来运行基本测试。只有在构建通过时才能提交更改。还有一些构建可以通过 gerrit 注释基于一些触发器来要求,例如运行耗时的 web 测试、集成测试等。
我的想法
通过在以下上下文中强制推送,我的意思是它必须绕过 gerrit 即直接推送到分支,而不是重新创建 git 历史记录的实际强制推送
- 为升级创建一个功能分支
product
,比如说feature/upgrade
- 确保为此分支设置了临时 CI 作业 wrt 新环境,包括按需作业
- 将升级所需的更改推送到此分支,直到应用程序可以正常运行
master
不时重新启动分支以避免在升级结束时发生批量冲突(需要 force-push onfeature/upgrade
)- 最后,将所有更改从
feature/upgrade
to推送到master
(需要强制推送master
),现在在 master 上配置 CI 作业以开始使用类似于新创建的临时作业中的配置
这个想法的缺陷是强制推动。我们确保分支机构被锁定以防止此类推送,因为它使分支机构容易出错,并且组织中只有少数人可以进行此类提交。可能是我不知道我可以在这里利用的一些 gerrit 功能,或者我的想法完全错误。我需要知道处理这种情况的最佳方法是什么。