如何将父作业中已经使用的同一个 Jenkins Slave 用于子作业?

如何将父作业中已经使用的同一个 Jenkins Slave 用于子作业?

假设我有一个詹金斯作业“abc_job”,它根据某些条件调用另一个詹金斯作业“xyz_job”。

现在由于某些原因,这两个作业都应该在同一个 jenkins 从属服务器上运行,这会导致死锁情况,因为作业“abc_job”已经触发了“xyz_job”,而“xyz_job”正在等待“abc_job”释放 jenkins 从属服务器以使其开始工作。

您怎样克服这种情况?

答案1

据我所知,有三种方法可以解决这个问题,而且我过去也使用过。哪种方法最好取决于您的具体情况。

  • 添加更多执行器插槽。您还可以使用执行器标签并将构建限制到某些标签,以确保下游作业始终有一个空闲的执行器插槽,但这很难做到正确。
  • 不要等待下游作业完成。使用 运行构建build(wait: false, job: ...)。父作业将立即退出,而不是在等待下游时占用执行器槽。这会导致如果下游构建失败,父构建不会失败。
  • 不要build()node { }块内调用。节点块外的代码在主节点上执行,不会占用执行器槽。但是我相信这只有在使用脚本管道而不是声明式管道时才有可能。

相关内容