问题:执行'mvn deploy'的最佳解决方案是什么,只有在所有单元测试成功并且没有重复处理步骤后才运行部署部分?
我希望简单的答案是:执行maven命令'x'(或使用标志),这样部署就可以在默认生命周期中调用之前的目标而无需调用。
可悲的是,这似乎没有一个简单的答案。我已经将详细信息包含在我到目前为止所遵循的路径中。
我们有以下三个要求:
我们从简单的“mvn clean deploy”开始,但是我们注意到了几个问题:
这导致“损坏”状态,其中远程存储库可能只有部分部署(如果在构建中稍后有模块出现故障)。
我们研究了3种不同的解决方案:
我向社群提出这个问题,并提供我提供的背景详细信息,以确定是否有更好的方法或强烈的意见(可能)提出以下请求之一:
开箱即用,绝对违反当前的惯例:
注意:
2013年8月20日更新
我测试了延迟部署插件并确定该工具按预期工作,但是很长时间。
对于我们的代码库:
在部署跳过测试之后,干净的软件包运行得比延迟部署更快,并且在测试成功之前完成了延迟部署的愿望。
部署生命周期执行并退出前面的每个目标(进程,编译,测试,包等)时,似乎有一点点时间。然而,唯一的选择是破解非标准执行,只能节省10秒。
答案 0 :(得分:29)
现在有一个新的答案。从maven部署插件的2.8版开始,就可以实现这一目标"本地"。有关详细信息,请参阅the jira issue。
基本上你需要强制插件的至少v2.8
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8</version>
</plugin>
并使用新参数deployAtEnd
。更多信息here。此设置通常与maven-install-plugin
installAtEnd
一起使用
答案 1 :(得分:2)
作为替代方案,我也发现了这一点 http://code.google.com/p/maven-deferred-deploy-plugin/
一个maven插件,它遍历反应堆中的所有项目 在每个项目上单独执行部署。可以用来生产 通过延迟工件部署来实现反应堆的近原子构建 直到安装阶段完成。
听起来很像你要求的。我仍然认为我的其他答案更容易实现,因为你使用jenkins,只需选中一个复选框
答案 2 :(得分:1)
两件事。
在“构建后的行动”中
将工件部署到Maven存储库。与之相比 标准的mvn deploy,此功能允许您在之后部署工件 确认整个构建成功。 这可以防止Maven中的典型问题,在某些模块被部署之前,在发现严重故障之前, 呈现存储库状态不一致。 请注意,无论此配置如何,您都可以手动返回Jenkins并将任何过去的工件部署到 事后,您选择的任何存储库。 要使用此功能,您不应停用自动工件存档。
我从未使用过这个,所以我无法确认它是否有效,我只是知道这个用于特定用例