3

Jenkins 场景详细信息:
=======================
- Jenkins 中构建执行器的数量(主/从):3
- 上游作业:USJob和此作业可以在任何构建执行器上运行
- DownStream 作业:DSJob和此作业有120秒的安静期+它仅与特定的构建执行器上运行有关。


  • USJob 在构建步骤中有这个:echo "Happy Birthday James" ,完成这项工作需要 5 秒
  • DSJob 在构建步骤中有这个:回显“詹姆斯邦德已死” ,完成这项工作需要 5 秒

现在,假设我们运行USJob (parent/UpStream job) 5 次,这将 ---> 调用DSJob (child/DownStream job) 5 次,那么,我想要的是:

  1. Jenkins 应该运行 USJob 5 次,因此在每次调用期间调用 DSJob 子作业。
  2. DSJob 不会运行 DSJob(一旦从 USJob 调用),DSJob 将处于空闲状态或排队等待“120 秒”(即设置为静默期)。

  3. 现在,如果我们看到这种情况,UPJob 将调用 DSJob 5 次,并且 DSJob 将在队列中等待,直到满足该相当时期。因此,一旦安静期结束,Jenkins 将启动 DSJob。

我的问题: 我想查看的是我可以在 DSJob(子作业)中设置什么设置/选项,以便 DSJob 只运行一次,而不关心它被调用了多少次。 换句话说:如果詹姆斯邦德/某人死了一次,他就不能再死了!……明白了!但是有人可以在他的生日那天祝他生日快乐 N # 次。

-- 这个概念类似于在 TFS 中以累积方式运行持续集成 (CI) 构建(Team Foundation Server - 在构建定义的 TRIGGER 部分内),即一旦源代码控制发生更改就运行构建,但将所有更改累积到源代码控制,直到正在运行的 CI 构建正在进行,一旦完成,下一个 CI 构建将选择开发人员完成的所有其他源代码控制更改。

4

3 回答 3

2

我同意,因为这是一种选择,我最终会走这条路。感谢分享埃尔达。我们基本上不想通过将文件放入工作区来使用,因为我们在任何机器上的任何可用从属设备上运行作业,并且不想在所有机器/从属设备都可以访问的中央 NAS 上创建文件。另外,我不想让子/下游作业寻找父/上游作业,如果它以 X 状态完成,然后运行它。

我这样做的方式是在 DSJob 上使用 Quiet period 设置为 120 秒 + 从 USJob 或 DSJob 的任何其他父级调用“DSJob”(您可以选择直接/通过属性文件传递/或不传递参数)+ 发现它工作正常。当我安排多个 USJob 时,第一次出现的 USJob 称为 DSJob,它等待了 120 秒(或 X 秒你想要的),然后一旦 USJob 第一个作业完成,第二个 USJob 开始并完成,它再次调用 DSJob 但这并没有不要将新的 DSJob 放入队列中,尽管它只是碰到了剩余的 X 号。工作 DSJob 从 X 开始运行的秒数 - 无论到目前为止花费了多少时间......再次回到 X 秒,这很好。我还使用了“Build Blocker 插件”,但我只是用它来在逻辑上明确我的观点,因为事情就像我想要使用 DSJob 上设置的“安静期”概念一样工作。

于 2013-02-28T16:48:06.590 回答
2

如果我理解正确,您不希望在 5 次(快速)USJob 执行后发生 5 次 DSJob 执行。您宁愿希望 DSJob从 USJob的最后一个触发器执行一次吗?受SCM的静默期功能的启发?

如果是这样的话,那么我面临同样的问题。我所做的是编写一个 Groovy 脚本,作为 USJob 的最后一步执行。首先,它获取所有下游作业的列表(在您的情况下将简单地返回 DSJob)。如果您不需要它动态工作,您可以跳过此步骤。如果这些作业中的任何一个已排队,则脚本会将它们从队列中删除。然后 USJob 将正常触发 DSJob(再次)。

最终结果是,如果 USJob 在 120 秒的时间范围内触发了多次,DSJob 只会触发一次。只有来自 USJob 的最后一个触发器才会生效。

我是一个 Groovy 新手,所以我的脚本是我在网上找到的其他脚本的杂乱组合。我知道有更好的方法来做到这一点。如果这是您正在寻找的解决方案,我将发布(凌乱的)脚本。

于 2013-05-08T12:34:26.087 回答
1

我建议以下想法:根本不要将美国和 DS 工作联系起来。让美国的工作做好它的事情并完成。让 DS 作业检查某些内容以决定是否开始。

要实现这一点,请使用Script Trigger Plugin。我将它用于类似的需求,并且效果很好!您可以完全控制触发并使用编写良好的脚本,您可以应用您想要的任何逻辑,让您完全控制触发和流程。

请注意 - 评估构建的脚本不必保存为外部文件。它也可以写入作业的配置中。还支持 Groovy 脚本。

希望这可以帮助。

于 2013-02-23T06:14:33.247 回答