我有几个项目在不同的分支上进行开发和发布,分别是development和release。这个过程运作得相当不错,但不幸的是它有一些缺点,我一直在想是否有更好的版本控制方案适用于我的情况。
主要的开发是在一个开发分支上进行的(即Subversion的trunk,但这并不重要),团队成员提交他们的更改。构建和打包工件后,Jenkins会将它们部署到Maven仓库和开发集成应用服务器上。这是一个DEVELOPMENT-SNAPSHOT,并且基本上只是一个包含所有开发功能的特性分支:
<groupId>pl.cyfrowypolsat.process-engine</groupId>
<artifactId>process-engine</artifactId>
<version>D.16-SNAPSHOT</version>
当QA团队完成一项业务更改并请求后,这个单独的更改会被合并到发布分支(branches/release)中。 Jenkins将生成的构件部署到QA应用服务器:
<groupId>pl.cyfrowypolsat.process-engine</groupId>
<artifactId>process-engine</artifactId>
<version>R.16-SNAPSHOT</version>
然后通过maven-release-plugin在软件的发布分支版本上进行发布(该插件会创建一个维护标签/分支以进行快速bug修复)。 (R.16-SNAPSHOT => R.16)
目前开发和发布分支的版本号分别为D.16-SNAPSHOT和R.16-SNAPSHOT。这样可以将artifact在maven存储库中分离,但会在依赖于标准maven版本控制的不同maven机制中出现问题,并破坏OSGI版本控制。
现在,在这种方案中,您应该如何命名和为maven artifacts命名版本?有更好的方法吗?也许我可以对maven结构进行一些更改,而不仅仅是更改版本控制和命名方案?但我需要保持开发和QA(发布)SCM分支分开。
使用'maven classifier' 'development' / 'production'是否是合理的替代方案?
<groupId>pl.cyfrowypolsat.process-engine</groupId>
<artifactId>process-engine</artifactId>
<version>16-SNAPSHOT</version>
<classifier>D</classifier>
16-R-SNAPSHOT
和16-D-SNAPSHOT
这样的版本,而不要使用分类器。 - itsadok