2013-12-13 66 views
3

我想知道是否有可能同时在几个功能分支上的maven项目上工作,并避免不断覆盖Nexus中其他功能分支产生的工件。基于功能的开发Sonatype Nexus OSS

我正在使用gitflow工作流开发多个组件(30+)的跨国项目中工作。每个组件都有一个git存储库,因此gitflow工作流将应用于每个组件。所以每个组件都有一个开发和几个功能分支。一般来说,每个部件至少产生一个由其GAV识别的人造体。

比方说,我们有组分A(与功能分支功能/ A-foo和功能/ A-吧)和B(与特性分支功能/ B-富)

Component A: 
A:develop 
A:feature/A-foo 
A:feature/A-bar 

Component B: 
B:develop 
B:feature/B-foo 

答: feature/A-foo和B:feature/B-foo在同一主题上工作,并需要交换快照版本以测试其交互(例如客户端/服务器功能)。组件A和B只能通过Nexus交换工件(其他组件的源代码不可访问)。所以A:feature/A-foo必须部署它的快照构件以使其可用于B:feature/B-foo,反之亦然。但是当后来部署的A:特征/ A条(其工作在完全不同的主题上)时,由于相同的GAV和更近的时间戳以及B:特征/ B-条,它在Nexus中“覆盖”快照构件, foo会在其下一个版本中导入错误的工件。

一种解决方案是延伸与功能名称的GAV(例如富):

some.company.componentA-1.2.3-foo.jar 
some.company.componentA-1.2.3-bar.jar 
some.company.componentB-3.2.1-foo.jar 

这种方式可以避免使A:特征/ A-FOO被重写A的构件:特征/ B因为他们有不同的GAV。但是这非常容易出错(在重新合并时重新命名GAV时重新命名;如果有人忘记重命名它,则会混淆构建)。

有没有更好的解决方案?还是应该禁止在特性分支上部署?

+2

[如何使用Maven连续构建和部署功能分支?](http://stackoverflow.com/questions/11413624/how-to-continuously-build-and-deploy-feature-branches-with- maven) –

回答

3

功能分支不应长期存在,因此在很多情况下,您最终根本无法部署。但是,如果你确实想部署(这是一件好事),版本字符串中的分支限定符是​​最好的方法。如果使用处理版本更改的脚本来自动执行分支创建,那么根本不会出现这种错误,并且实际上对您的整体策略非常理智。添加一个功能特定的CI作业(或其中几个),也许使用版本Maven插件,你应该准备好滚动。

+0

我在詹金斯定义了两种不同的工作类型。一个用于连续构建(在特性/ *分支上进行侦听),另一个用于每晚构建(仅在开发分支上进行侦听)。通常,连续构建作业不会部署在功能分支上生成的工件;只是开发分支得到部署。 但是在某些情况下,您需要在功能部件上部署SNAPSHOTS。调整版本号的方式证明是可行的,但对我来说这并不是令人信服的解决方案。但显然没有更好的解决方案。 “使用版本Maven插件”是什么意思? – beaker

+1

可以在脚本中使用版本Maven插件将版本设置为一个命令中整个多模块项目中的不同内容。您可以自动执行版本号更改,以轻松包含分支名称。 –