2010-05-18 103 views
2

任何人都可以帮助解决这个问题吗?哈德森管道

我有一个测试工作,一个下游工作和一个加入工作。 我只想在下游作业成功时运行加入作业。

如果测试作业失败并且下游作业成功,我仍想运行连接作业。

任何人都知道一个插件,可以帮助在这里?

连接插件不够好,因为我可以将它配置为在测试AND下游成功时运行连接作业,或者无论任何作业成功/失败都运行连接。但是,如果下游成功,则不会运行加入作业。

为什么我想这样做?我想共同管理工作,但前提是共同的“下游”工作成功。如果失败,那么我希望管道“断裂”。

添加更多信息到原来的问题: 所以我有一套测试(Test.1,Test.2,Test.3)。我可以从哈德森单独运行他们,他们运行,产生结果并完成。我也希望能够将它们作为管道的一部分运行。 Test.1运行,完成并运行Test.2。等等所以我有两种独立的方式可以运行Test.1。个人或作为管道的一部分。为了帮助我在这里做了Test.1,Test.2等参数化(true/false)。默认情况下,参数是错误的。所以当我默认运行Test.1(false)时,测试运行并结束。当我用参数运行Test.1时,我希望它运行Test.2。这第二位我似乎无法做到

非常感谢 约翰

+0

是否所有的测试都必须依次运行?如果没有,只需创建一个触发所有测试作业的Test.all作业。如果测试任务的顺序并不重要,那么您可以使用锁和插锁插件序列化它们(该插件有一个错误,这意味着即使作业缝并行运行,它们也会在每个其他;检查问题数据库以获取更多详细信息) – 2010-05-19 16:45:54

+0

是的,所有测试都必须按顺序运行,尽管它们的运行顺序并不重要。如果lock-and-latch插件可以串行访问,那么Test.All作业将正常工作。感谢提示和耐心彼得。我会让你知道我如何继续。 – johnoc 2010-05-20 09:17:30

回答

0

你就不能跳过加入插件,使参加工作完全依赖于下游的工作吗?只要确保“即使构建不稳定”的“触发器”框在下游构建中的依赖关系定义上未被选中,也可以满足您使联接作业仅在下游作业成功时运行的要求。

+0

不能这样做,因为我的下游工作对于很长的工作流程来说很常见。即作业A运行,调用下游作业,如果下游成功作业B运行,则调用下游作业,如果下游成功作业c运行。 “下游”工作是我整个工作流程中常用的一项检查。基本上,“下游”作业将检查其父作业是单独运行还是作为管道的一部分运行。如果单独下游失败(停止运行下一个子作业),如果作为管线的一部分,则下游通过,启动下一个子作业。 希望我解释这个好! – johnoc 2010-05-19 08:39:53

1

与Gareth_bowles类似,我会链接所有作业(不加入),并使用Hudson Parameterized Trigger plugin开始从属作业,即使当前作业失败。唯一的缺点是,你没有平行的工作。

再次想到,无论测试作业是否成功,您都可以使用Hudson Parameterized Trigger plugin在测试作业之后运行临时作业。临时作业总是成功的(因为它实际上除了触发连接作业外什么都没有做到,这样你的测试作业(从连接作业的角度来看)总是成功的,只有下游作业确定连接作业是否运行。

编辑

理解你真正想做的事情之后,即运行Test.N独立或作为链的一部分,我会去与我的第一个建议,这意味着Test.N总是引发了下游。 N作业,无论Test.N成功还是失败,都需要Hudson Parameterized Trigger plugin并配置两个触发器,第一个触发器在测试作业成功或不稳定时触发依赖作业,第二个触发器也触发dep只有在测试工作失败的情况下才能进行工作。不要忘记传递参数并完成。不是很复杂。

+0

你的第二个想法与我在第一篇文章中试图解释的内容非常接近。除了有时我希望临时工(我称之为下游工作)失败。当它确实失败时,我想停止管道。但是,只有当下游作业失败时,我才希望管道停止。如果原始测试作业失败,我希望管道继续。 – johnoc 2010-05-19 08:46:25

+0

我同意你(johnoc)说它很接近,但是,我仍然加入了连接插件。这提供了联合作业在两者(依赖作业和测试作业完成)后运行的好处。如果他不需要连接插件的这个功能,他可能不会用它来开始。如果不使用联接,并且构建作业触发下游和测试作业,但只有下游作业触发联接作业,即使测试作业未完成,联接作业也可能运行。 – 2010-05-19 11:50:18

+0

下面是我想要做的示例流水线: (Test.1,DownstreamCheck,join Test.2)(Test.2,DownstreamCheck,join Test.3) 所有作业都参数化为TRUE/FALSE。 如果DownstreamCheck得到一个FALSE参数,那么它失败。这应该停止运行加入作业。 这是停止运行Test.N作业的唯一原因。 但是,当我尝试在哈德逊实现这个我有两个问题: 1.连接配置不会允许一个参数。 2.如果DownstreamCheck或parant Test.N作业失败,则联接Test.N作业将不会运行。如果DownstreamCheck失败,我只希望它停止。 – johnoc 2010-05-19 13:24:38