如何使用Maven持续构建和部署功能分支?

问题描述 投票:0回答:5

我的团队正在使用功能分支来实现新功能,并不断将快照版本部署到远程存储库中供用户使用。因此,“部署”实际上仅意味着“分发到远程 Maven 存储库”。目前,我们仅针对主分支而不是功能分支运行持续集成构建,原因如下:我们使用 Maven 来构建我们的项目并与 JAR 一起分发 JavaDoc 和源代码。

我现在的计划是向每个功能分支构建添加一个分类器,并期望在创建和部署工件时使用该分类器,如下所示:

  • 分支:master
  • 分类器:无
  • 工件:

    foo-${version}
    .jar、
    foo-${version}-sources
    .jar、
    foo-${version}-javadoc.jar

  • 分支:功能-X

  • 分类器:myfeature
  • 文物:
    foo-${version}-feature.jar
    foo-${version}-sources-feature.jar
    foo-${version}-javadoc-feature.jar

我并不真正关心工件的确切命名,我只需要功能分支的单独的主工件、源工件和 JavaDoc 工件。事实证明,JavaDoc 插件和源插件都没有考虑配置的分类器,因此有效地覆盖了为我的主构建创建的工件。

我真的不想更改artifactId,尽管这可能会解决问题。您如何处理功能分支以及与 Maven 的持续集成?

maven continuous-integration maven-javadoc-plugin feature-branch maven-source-plugin
5个回答
10
投票

我建议将分支限定符添加到版本组件中,因为它与该部分更相关。这还允许您的快照依赖于主分支旁边的这些版本。


9
投票

我建议使用代表分支的适当版本以及类似的版本:

1.0.0-master 快照

1.0.0-F1-功能 F1 的快照

等等

这也给出了功能分支是从哪个版本 1.0.0 开始的指示。


7
投票

按照其他人的建议,使用版本号来存储分支名称是一个快速的胜利,但如果您使用版本范围,则会导致问题。版本号不应该这样使用。我们在持续集成过程中使用它们,使集成测试依赖于被测试的工件:

[1.8-SNAPSHOT,1.9-SNAPSHOT)

版本号内的限定符部分表示同一代码库的不同增量阶段:

1.8-alpha1-SNAPSHOT
1.8-alpha1-SNAPSHOT
1.8-beta1-SNAPSHOT

这就是为什么上面的版本范围将捕获上述内容,并且 Maven 会按此顺序对它们进行排序

1.8-SNAPSHOT
1.8-alpha1-SNAPSHOT
1.8-alpha1-SNAPSHOT
1.8-beta1-SNAPSHOT

任何在版本号 (

1.8-featureA-SNAPSHOT
) 中带有功能分支名称的工件都将比不带限定符的快照更新。但功能分支是“不同”的代码库,而不是同一代码库的更新表示。对于我们的集成测试场景,这导致了无用的测试失败。功能分支尚未准备好进行集成测试。

我们现在遵循这个规则:如果你无论如何都必须更改某些内容,为什么不更改工件 ID?我们更改了功能分支的工件 ID,它工作得很好。


5
投票

您可以使用 maven-branch-extension 为每个功能分支有效创建单独的 SNAPSHOT 命名空间,而不是更改工件的 Maven 坐标。引自项目页面:

我们不是在功能分支上更改版本号,而是 更改存储库。每个功能都部署到一个子目录中, 基于他们的分支名称,在远程存储库中,仅用于 特色分支。不存在工件被覆盖的风险。 版本号不会改变。使用 Git 进行分支和合并 简单(就像它本来的意思一样!)。

扩展获取当前Git 分支并解析存储库 URL 中的属性,以便 工件可以正确存储和检索。它还管理 将工件缓存并提取到本地存储库,以便 工件从功能分支存储库中获取(如果存在), 当从功能分支工作时。

这样做的好处在于,SNAPSHOT 依赖项的外部用户与主题分支的内部工作完全隔离。


0
投票

我知道这是一个老问题,但是对于那些正在寻找更好的 CI 解决方案的人来说,从 maven 3.5.0 开始,引入了 3 个变量来满足此类需求:https://maven.apache.org /maven-ci-friend.html 一般来说,您可以在 pom.xml 中使用

<version>${revision}${sha1}${changelist}</version>
。然后您可以更改功能分支的
sha1
值。

   <properties>
    <revision>1.3.1</revision>
    <changelist>-SNAPSHOT</changelist>
    <sha1/>
  </properties>
© www.soinside.com 2019 - 2024. All rights reserved.