当下游项目被触发时,Hudson执行上游项目

时间:2010-10-04 07:21:55

标签: hudson

这似乎是一件简单的事情但不知怎的,我无法弄明白。我有一个项目A和一个项目B.如果项目A成功执行项目B是构建。这没有问题。如果我只想执行项目B,我希望在构建之前,将再次构建项目A.这可能吗 ?所以基本上,Project B不应该单独运行,它应该始终是Project A build。提前谢谢。

裤裤

4 个答案:

答案 0 :(得分:1)

我能想象你想要这种行为的唯一原因是你有某种循环依赖。你真的应该试图摆脱这些,因为它们将大大减缓未来的发展。

任何减慢反馈循环的因素都会导致生产力损失大量成本。

答案 1 :(得分:0)

一个简单的解决方案怎么样?如果A或B的存储库发生更改,则触发项目A.项目B永远不会由SCM更改触发,但始终在构建A之后触发。这可能会花费您在磁盘上更多的空间和更多的结账时间。但这很简单直接。没有计时器,它只会在通过SCM触发时构建。

您可以选择共享工作区,但我会选择退出此选项,因为您需要同步这两个作业,以便它们永远不会并行运行。我会使用克隆工作区插件,将工作区从A复制到B(你只会得到最后一个(默认情况下,最后一个成功),但即使有一个新的构建,你也会得到它。

根据谁负责这两个项目(两个不同的团队或一个团队),您还可以将两个构建合并为一个作业。

答案 2 :(得分:0)

也许你可以在A的存储库中添加一个额外的文件,并以某种方式确保每当代码提交给B时,这个文件都会以某种方式被修改?另外,为B执行一个安静的时期。这样A总是在B之前构建。

答案 3 :(得分:0)

另一种可能性:你可以在B的配置中添加一些shell脚本来手动触发A,除非这个构建是由A触发的。

首先让它检查触发构建的内容。我不确定是否有“正确”的方法来获取这些信息,但这是一种方式。阅读build.xml文件(在jobname / builds / jobnumber /下),并查找这些内容:

由SCM触发:

<hudson.model.CauseAction>
    <causes>
        <hudson.triggers.SCMTrigger_-SCMTriggerCause/>
    </causes>
</hudson.model.CauseAction>

另一份工作引发:

<hudson.model.CauseAction>
    <causes>
        <hudson.model.Cause_-UpstreamCause>
            <upstreamProject>agp_lib_V5</upstreamProject>
            It goes further than this but that's all you need.

一旦你知道什么触发了B的构建,你就可以触发A的构建并退出(对于SCM触发的构建)或继续构建正常(对于上游触发的构建)。

它不漂亮,但它可以工作。

相关问题