使用 Sonatype Nexus OSS 基于功能的开发

bea*_*ker 6 nexus maven git-flow

我想知道是否可以同时在多个功能分支上处理 Maven 项目,并避免不断覆盖 Nexus 中其他功能分支产生的工件。

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

假设我们有组件 A(带有特征分支 feature/A-foo 和 feature/A-bar)和 B(带有特征分支 feature/B-foo)

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

Component B:
B:develop
B:feature/B-foo
Run Code Online (Sandbox Code Playgroud)

A:feature/A-foo 和 B:feature/B-foo 工作在同一个主题上,需要交换快照版本以测试它们的交互(例如客户端/服务器功能)。组件 A 和 B 只能通过 Nexus 交换工件(无法访问其他组件的源代码)。因此,A:feature/A-foo 必须部署其快照工件以使其可用于 B:feature/B-foo,反之亦然。

但是当 A:feature/A-bar(适用于完全不同的主题)之后部署时,由于相同的 GAV 和更新的时间戳,它会“覆盖”Nexus 中的快照工件,并且 B:feature/B-foo 将导入在其下一个构建中出现错误的工件。

一种解决方案是使用功能名称(例如 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
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以避免 A:feature/A-foo 覆盖 A:feature/B-bar 的工件,因为它们具有不同的 GAV。但这非常容易出错(在分支时重命名 GAV,再次合并到开发时将其重命名;如果有人忘记重命名,它会搞乱构建)。

有没有更好的解决办法?还是应该禁止在功能分支上部署?

Man*_*ser 5

功能分支不应该存在很长时间,因此在许多情况下,您最终根本不会部署。但是,如果您确实想部署(这是一件好事),则版本字符串中的分支限定符是​​最好的方法。如果您使用负责版本更改的脚本自动创建分支,那么它根本就不会那么容易出错,而且实际上对您的整体策略来说是一个很好的理智。添加一个特定于功能的 CI 作业(或其中一些),也许使用 Versions Maven 插件,你应该准备好开始了。