2011-03-04 88 views
8

我为我们的maven多项目创建了一个hudson作业,包含5个模块以将SNAPSHOT构件部署到maven库。没关系,只要它在没有测试失败的情况下成功构建即可。但是,现在我想满足以下要求:配置hudson maven作业,在测试失败时继续构建,但只在没有测试失败时部署

  • 当模块发生测试失败时,构建应继续构建并测试其他模块,但变为黄色。使用-Dmaven.test.failure.ignore=true完成,但在下一个要求失败。
  • 当模块发生测试失败时,没有任何工件应该部署到Maven存储库。其他项目依赖于这个项目的快照,这些项目只想使用最新的快照,没有任何测试失败
  • 最好使用哈德森maven集成,而不是免费的脚本,我们得到哈德森报告页面(每个模块的红色/黄色/蓝色状态,生成日志错误着色,...)。特别是运行Maven构建两次(第一个mvn test -Dmaven.test.failure.ignore=true,而不是mvn deploy -DskipTests)不是一个解决方案,因为它是一个性能损失,它混淆了哈德森报告页面,它不是原子的(它在第二个版本中再次从存储库中更新)。

有什么办法可以做到这一点?

回答

5

有一个后期构建选项,名为将工件部署到Maven存储库。如果你没有选择即使构建不稳定,那么这意味着如果测试失败,它不会部署任何东西。与命令中的-fae一起,事情应该以您期望的方式工作

+0

陷阱:选项*将工件部署到Maven存储库*在自由式哈德森作业中不可用,仅在maven2哈德森作业中(显然对于maven 3不起作用)。 – 2011-03-22 08:44:11

+0

现在,maven2 hudson/jenkins构建确实支持maven3 – 2011-04-01 13:26:29

2

也许你可以尝试使用哈德森MVN -fae选择与你的工作 - 它让行家只有全力打造

+0

-fae选项(在结束时失败)不会停止部署I presume。但它看起来比-Dmaven.test.failure.ignore = true更好,谢谢! – 2011-03-10 08:00:59

1

失败后如果建造时间是不是对你的问题,我认为更好的选择是创造另一份工作,仅用于部署。事情是这样的:

  1. 与配置你原来的工作(我们称之为“建设工作”)“MVN -fae干净安装”
  2. 创建一个新的工作(“部署任务”)与“MVN部署”,不配置任何构建触发
  3. 在“建设工作”,使构建其他项目选项,下生成后的行动并将其设置为运行“部署任务”。

也许您可以尝试将两个作业配置为使用相同的工作区,从而节省整个构建/部署过程的一些时间。

+1

通过使用免费脚本代替maven集成,可以在单个作业中完成,但*特别运行maven构建两次(第一个mvn测试-Dmaven.test.failure.ignore = true,而不是mvn deploy -DskipTests)是不是一个解决方案,因为它是一个性能损失,它混淆了哈德森报告页面,它不是原子的(它在第二个版本中再次从存储库中更新)。* – 2011-03-16 07:57:11

1

如果您恰巧使用Artifactory作为存储库管理器,则可以使用Hudson/Jenkins Artifactory plugin来部署您的工件。如果所有测试都通过了Maven构建的所有模块,该插件将只部署您的构件。

+0

有趣的解决方案。虽然我们使用Nexus,但是我会看看他们是否有类似的东西。 – 2011-03-17 12:16:41

相关问题