Maven和Jenkins:部署多个分类器

时间:2014-03-11 14:27:08

标签: maven deployment jenkins classification snapshot

我们目前正在从maven2迁移到maven3。 现在我们在一个共享项目中遇到了maven3的新“SNAPSHOT”策略的问题。 该项目使用过滤器提供不同的配置,为不同的环境(dev,int,production)设置不同的设置,这些设置是分割的分类器。

在我们的Jenkins构建服务器中,在我们的本地公司repo中生成并部署这三个分类器:主要maven目标中的dev,其他作为后续步骤。

在maven2中这没有问题,因为在我们的存储库中部署之后:

  • 伪影1.2.0-快照dev.jar
  • 伪影1.2.0-快照int.jar
  • 伪影1.2.0-快照prod.jar

使用maven3,我们现在有了这个带时间戳的版本:

  • 伪影1.2.0-20140212.103043-1-dev.jar
  • 伪影1.2.0-20140217.174231-2-int.jar
  • 伪影1.2.0-20140311.125512-3-prod.jar

现在使用分类器dev或int构建其他项目会中断,因为最新的SNAPSHOT版本是第3版(prod),并且无法从我们的存储库中解析dev和int。

据我所知,不可能告诉maven3在没有时间戳的情况下部署“好老”的SNAPSHOT。是否有解决方案来处理一个maven3调用中的所有配置?或者我们如何将Jenkins配置为“一个SNAPSHOT”?

提前致谢

更新1

如下所示配置Post步骤:

Maven目标:

  • Maven版本:3.1.1
  • 目标:清洁部署-Pint

Maven目标:

  • Maven版本:3.1.1
  • 目标:清洁部署-Pprod

2 个答案:

答案 0 :(得分:0)

根据我的理解,从Maven 3生成的工件在其名称中带有时间戳,如artifact-1.2.0-20140212.103043-1-dev.jar,这会导致依赖构建失败。

由于您需要Maven 3来生成具有命名约定artifact-1.2.0-SNAPSHOT-dev.jar的工件,这可以通过在相应的POM.xml中使用“finalName”标记来实现,这些标记会生成这些工件。

Controlling maven final name of jar artifact

此致

Jyotsna

答案 1 :(得分:0)

这不符合您的计划。正如您所说,在Maven 3中无法使用非带时间戳的存储库。

您有两种选择:

  1. 以一种在一个构建中创建所有分类器的方式调整构建(可能通过使用不同的模块而不是不同的分类器)
  2. 或者创建自己的部署机制。
  3. 我强烈推荐解决方案1。