具有子模块构建的Jenkins / Maven多模块未能通过发布构建

时间:2014-09-05 21:32:28

标签: git maven jenkins maven-release-plugin

我有一个Jenkins / Maven / Git多模块项目,其中包含一个子模块(由承包商开发,没有任何东西可以改变它)。由于Git和子模块,我必须在我的Linux中克隆repo,使用命令" git clone --recursive ssh://xxxxxxx.git"。

这意味着我必须检查“高级子模块行为”的Jenkins Git插件选项'和'递归更新子模块'以便填充所有模块(否则子模块保持为空)。

所以我或多或少都有这种配置:

    ParentDir
        Module 1
            pom.xml
        Module 2
            pom.xml
        ...
        Module n
            pom.xml
        Submodule
            pom.xml
        pom.xml
    

Jenkins的所有东西都在正常建筑中构建得很好(' mvn clean install')。只有在尝试构建发布版本时才会出现问题 子模块设置为特定版本 - 3.3.3-SNAPSHOT并且无法更改。依赖于此子模块的其他模块的依赖关系设置为版本3.3.3-SNAPSHOT。不幸的是,当命令:

      mvn release:prepare -DreleaseVersion = 0.1.2-test -DdevelopmentVersion = 1.0.1-SNAPSHOT

Jenkins修改项目 中每个模块中的所有pom文件,包括子模块 。那时,当maven尝试构建时,没有子模块版本0.1.2测试,一切都会死掉。当我对Jenkins离开的文件与我们的存储库中的内容进行差异时,我看到:

>/opt/tools/bin/git diff pom.xml | cat
diff --git a/pom.xml b/pom.xml
index 5e4cc3c..2ac2db6 100644
--- a/pom.xml
+++ b/pom.xml
      <artifactId>workingLib</artifactId>
 -      <version>3.3.3-SNAPSHOT</version>
 +      <version>0.1.2-test</version>
      <packaging>pom</packaging>

有没有办法告诉Jenkins / Maven不要更新子模块但更新所有其他模块?
谢谢,
凯文

2 个答案:

答案 0 :(得分:0)

父POM内的所有模块共享一个版本号。如果模块遵循不同的发布周期/不在您的控制之下,请不要将其作为模块。单独构建和发布它并将其作为依赖项包含在内。

不要试图解决Maven的惯例 - 这些工具不会很好地支持你,你会遇到问题。

答案 1 :(得分:0)

试图&#34; hack&#34; maven惯例总是一个坏主意。这样做时,Maven真的会过敏。您是否对mavens默认行为感到满意。如果你不是,那么尝试编写自己的发布插件。标准版本插件默认增加所有版本。没有办法摆脱这种行为。

在我看来,使用maven发布的默认方式并不是很好。特别是在多模块项目中,它是一团糟。我自己编写了一个shell脚本,只需执行以下步骤:

mvn versions:set
mvn clean install
git add
git commit
git tag
mvn deploy
mvn versions:set # now to next snapshot
git add
git commit
git push

简单地扩展它等等......