2013-04-22 57 views
5

我有一个Jenkins作业,使用maven构建目标的'clean package deploy'作为主git分支。然而,由于关系回购不允许重新部署,如果詹金斯作业运行不带版本号变化第二次,它会失败与预期400错误请求错误:通过Jenkins作业部署Maven的策略

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal 
    org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) 
    on project common-library: 
Failed to deploy artifacts: Could not transfer artifact 
    net.bacon.common:common-library:pom:1.2.13 from/to bacon-releases 
    (https://maven.bacon.com/nexus/content/repositories/releases): 
Failed to transfer file: 
    https://maven.bacon.com/nexus/content/repositories/releases/net/bacon/common/common-library/1.2.13/common-library-1.2.13.pom. 
Return code is: 400, ReasonPhrase:Bad Request. 

任何人都可以提出一个不同的策略,从而部署目标可以在没有使Jenkins作业失败的情况下运行?

+0

是否要部署快照或发行版本? – Puce 2013-04-22 13:50:04

+3

在部署阶段,软件包阶段再次运行时,您不应该运行* clean package deploy *原因。看起来你没有注意到生命周期。只需要运行* clean deploy *。如果您尝试部署已部署的工件,则无法再次运行该工件。为了这样的目的,你应该使用-SNAPSHOT而不是发行版。 – khmarbaise 2013-04-22 13:50:28

+0

@puce在这种情况下,它是一个发布版本 – Streetdaddy 2013-04-22 16:03:59

回答

4

我们所做的是自动快照构建。然后,版本自动递增。

对于发布版本,我们使用maven release插件并手动输入版本。但是,您可以让发布插件完成这项工作。它将删除“-SNAPSHOT”构建,部署,然后为下一发行版本增加最后一位数字并再次追加“-SNAPSHOT”。

对于分配管理,您可以拥有两个回购站,一个用于快照,一个用于发布,具有不同的重新部署设置。

+0

用于部署快照,然后使用Maven Release Plugin手动执行发布。请注意,有一个Jenkins插件可以支持Maven Release Plugin。 – Puce 2013-04-22 16:14:35

0

您应该确保主服务器上的每个提交在pom文件上携带自己的版本号。所以你不会重新配置。

拒绝“redeploys”有一个很好的理由:发布版本的内容不应该改变。

如果您无法避免在主服务器上提交相同的版本号,请考虑将链式jenkins作业更改为“干净安装”(仅将工件存储在本地存储库中),并使用“清理部署”创建新作业那只是手动启动的。

0

这对我们的团队也是一个问题。

我们希望maven试图进行PASSIVE部署,所以如果部署存在于nexus上,那么它将可接受地继续进行SUCCESS ALREADY DEPLOYED,如果部署不存在于nexus上,它将使用SUCCESS进行上载和部署。

我们希望jenkins在构建并通过覆盖检查后进行部署,但如何使其仅部署未部署,并且已部署的部署将被忽略。

我们的解决方案是一个自定义脚本。

1

我们采用了 “双重作用” 的解决方案:

  • 增量版本
  • 运行MVN安装
  • 运行测试
  • 如果全部通过,我们运行MVN部署

这样,我们不会尝试部署bef我们知道的矿石全部通过了,并且我们每次都部署了独特的版本。

我希望这会有所帮助。

+0

您是否找到了使用Jenkins从安装的jar中运行测试的方法? – JBCP 2014-05-28 19:57:56

+0

我们不直接使用安装的罐子。我们将它们打包成战争,然后装入RPM,我们将其安装在专用服务器上。这回答了你的问题了吗? – 2014-05-29 05:13:41

0

您可以使用释放候选概念。当你开始发布时,你可以在版本中添加-RC1(例如1.1.0-RC1)。

随着下一次重新部署,您将增加RC编号。当发布完成并且您想要生成新的TAG时,您只能删除该版本的RC。在TAG创建之前