Version control Maven版本控制不同分支的最佳实践[开发、qa/预发布]
我有几个项目是在不同的分支上开发和发布的,即开发和发布。这个过程运行得很好,但不幸的是它有一些缺点,我一直在想,在我的情况下是否有更好的版本控制方案 主要开发发生在一个开发分支上(即Subversion主干,但这并不重要),开发团队在那里提交他们的更改。在构建和打包工件之后,Jenkins将它们部署到maven存储库和开发集成应用服务器。这是一个开发快照,基本上只是一个包含一个公共分支上所有开发功能的快照:Version control Maven版本控制不同分支的最佳实践[开发、qa/预发布],version-control,maven,naming-conventions,branch,Version Control,Maven,Naming Conventions,Branch,我有几个项目是在不同的分支上开发和发布的,即开发和发布。这个过程运行得很好,但不幸的是它有一些缺点,我一直在想,在我的情况下是否有更好的版本控制方案 主要开发发生在一个开发分支上(即Subversion主干,但这并不重要),开发团队在那里提交他们的更改。在构建和打包工件之后,Jenkins将它们部署到maven存储库和开发集成应用服务器。这是一个开发快照,基本上只是一个包含一个公共分支上所有开发功能的快照: <groupId>pl.cyfrowypolsat.process-engi
<groupId>pl.cyfrowypolsat.process-engine</groupId>
<artifactId>process-engine</artifactId>
<version>D.16-SNAPSHOT</version>
pl.cyfrowypolsat.process-engine
过程引擎
D.16-1
当QA团队完成并请求一个特定的业务变更时,这个变更将被合并到发布分支(分支/发布)。Jenkins将生成的工件部署到QA应用程序服务器:
<groupId>pl.cyfrowypolsat.process-engine</groupId>
<artifactId>process-engine</artifactId>
<version>R.16-SNAPSHOT</version>
pl.cyfrowypolsat.process-engine
过程引擎
R.16-1
还有一个版本是通过软件发布分支版本上的maven发布插件发布的(它创建了一个维护标签/分支,用于快速修复bug)。(R.16-SNAPSHOT=>R.16)
开发和发布分支目前分别被版本化为D.16-SNAPSHOT和R.16-SNAPSHOT。这允许在maven存储库中分离工件,但使用依赖于标准maven版本控制风格的不同maven机制会产生问题。这也打破了OSGI版本控制
现在,在这样一个方案中,您将如何命名和版本maven工件?有更好的办法吗?也许我可以对maven结构做一些更改,而不是简单地更改版本控制和命名方案?但是我需要将开发和QA(发布)SCM分支分开
“开发”/“生产”的maven分类器是合理的选择吗
<groupId>pl.cyfrowypolsat.process-engine</groupId>
<artifactId>process-engine</artifactId>
<version>16-SNAPSHOT</version>
<classifier>D</classifier>
pl.cyfrowypolsat.process-engine
过程引擎
16-快照
D
据我所知,发布工件的通用命名扩展将只是工件的名称,没有任何内容,只有指定的版本。开发分支将具有相同的工件名称,但具有快照
例如,以twitter4j为例。发布版本的工件名称为
twitter4j-2.5.5
他们(his)开发版本的快照
twitter4j-2.6.5-SNAPSHOT
这是几乎每个人都使用的命名约定,并且被大多数工具认可。例如,我的Nexus存储库可以指定一个忽略开发版本的策略,这基本上意味着它忽略名称中包含-SNAPSHOT的工件
编辑:
关于你的后续问题:
嗯,根据构建工具的不同,您可以创建具有时间戳或其他唯一标识符的快照。然而,我从来没有听说过在工件的名称中嵌入一些分支逻辑,只是为了让continuousint服务器能够区分它。从工件的角度来看,它要么是一个版本,要么是一个快照,我不认为在工件的名称中嵌入更多的逻辑有什么好处,只是因为你的Hudson允许你这么做。老实说,我觉得您的发布周期还可以,但这需要对maven工具进行一些微调。如果你不能接受这一点,我建议你使用分类器,而不是依赖于名称,因为调整集成服务器总是比许多依赖于标准命名约定的插件更容易。总而言之,我相信您走上了正确的道路。Maven的发布插件支持。它的工作原理似乎是假设创建分支是为了支持代码的下一个版本
就我个人而言,我更倾向于使用插件,并明确地设置我的Maven项目的版本号。我认为就Maven而言,您只需使用两种类型就可以简单地完成这个过程
- 主子版本主干是开发人员提交代码的地方
- 在sprint/iteration分支的末尾,主主干被称为release分支(不应该有QA分支,任何要发布的代码都要经过质量测试)
- 错误修复应该发生在发布分支上,并定期合并回主干
- 通过这种方式,您可以继续为发布创建分支,并且任何错误修复都会提交给分支
- 始终确保在从主干创建新分支之前,它具有以前分支的所有合并