【问题标题】:Jenkins - only run a job on a node with 2+ executors freeJenkins - 仅在有 2 个以上执行者的节点上免费运行作业
【发布时间】:2017-09-30 03:06:51
【问题描述】:

我们有许多运行父作业和多个子作业的多作业。父级进行一些预处理,然后开始第一个子作业。 示例:

  • 家长 - 签出 git repos 并准备代码
    • 构建代码
    • 单元测试
    • 上传到 HockeyApp

由于父进程在子作业运行的整个过程中都在运行,因此该进程从一个执行器开始,然后在子作业启动时再启动一秒。放下它,然后在下一次开始时将其捡起。

我们有 4 个节点,每个节点上有 3 - 4 个执行器。我们也没有网络驱动器,因此子作业必须与父作业保持在同一个执行程序上,以避免在作业之间传递整个工作区。

问题是,如果一个作业正在运行并且有两个执行器,那么另一个会被启动,然后另一个,它们有可能最终都在同一个节点上,并且会发生如下情况:

节点 1

  • 执行者 1 - Parent1
  • 执行者 2 - Child1
  • 执行者 3 - Parent2
  • 执行者 4 - Parent3

现在 Parent2 和 Parent3 只是坐在那里等待一个免费的执行者。最终 Parent1 上的 Child 工作结束,然后 2 r 3 抓住执行者,所有人都在为它而战。

有没有办法告诉 Jenkins 只在一个至少有 2 个执行器空闲的节点上启动该父节点?我知道如果有人足够快地开始工作,我们仍然可能会遇到人为问题,但这会大大降低发生这种情况的机会。

【问题讨论】:

    标签: jenkins jenkins-plugins


    【解决方案1】:

    我认为您可以使用 - https://wiki.jenkins.io/display/JENKINS/Heavy+Job+Plugin ,并为每个步骤定义您需要的免费执行器数量。

    【讨论】:

    • 太棒了,我会测试一下!
    • 它保存了执行程序,但没有分配子作业给它,它仍然需要另一个空闲的分配子作业,所以它不能解决我的问题。我需要类似的东西,但这需要考虑多工作功能。不过谢谢你,我很感激你的努力!
    • 您只想同时运行 1 个父作业?或者您可以将父级的权重设置为 3 个执行者...
    • 我想在至少有 2 个空闲执行器的节点上启动父作业,这样当父级启动子作业时,可以保证在该节点上有一个可用的执行器运行孩子。设置权重对我没有帮助,因为虽然它保留了执行者,但它不会在其上运行子作业,因此它违背了目的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多