【问题标题】:How to run a job periodically and only if it's not already running on Jenkins如何定期运行作业,并且仅当它尚未在 Jenkins 上运行时
【发布时间】:2016-10-28 06:50:19
【问题描述】:

假设我有一个 Jenkins 作业,它每 5 分钟运行一次,只需要 3 分钟即可运行,然后该作业突然变得需要超过 5 分钟(比如 8 分钟)。在这种情况下,作业队列会变满,因为 Jenkins 会阻止执行新添加的作业,直到已经运行的作业完成。

我可以允许队列中的作业并发执行,但如果最后一个作业仍在运行,我更喜欢立即取消新添加的作业。这对詹金斯来说可能吗?还是我应该寻找更复杂的作业调度解决方案?

【问题讨论】:

  • 如果队列中已经有一个待处理的作业,下一个预定的作业会被自动取消。所以队列不应该充满待处理的工作(至少据我所知)。你有什么问题吗?
  • @arasio 啊,我没有充分测试它。你是绝对正确的。如果您将评论作为答案发布,我会接受。谢谢!
  • 如果这对您有用,那就太好了。我把它写成答案。

标签: jenkins


【解决方案1】:

如果队列中已经有待处理的作业,则会自动取消下一个计划的作业。因此,即使正在运行的作业比计划的时间长两倍或更长,队列也不应该充满待处理的作业。

【讨论】:

  • 我不认为这是真的。我刚刚检查并发现詹金斯在完成上一份工作之前开始了一份新工作。 (带 CRON H/30 * * * *)
【解决方案2】:

我认为您可以使用“为运行准备环境”脚本。当第二个作业启动时,您可以搜索构建节点以查看当前是否正在运行相同的作业,并取消排队的作业。我发现了更多信息:

Cancel queued builds and aborting executing builds using Groovy for Jenkins

【讨论】:

  • 感谢您的回答。使用 Groovy 脚本是一种可能的方式,但我实际上只需要防止构建队列充满许多阻塞的构建,根据@arasio 的评论,我真的不需要为此做任何事情。
猜你喜欢
  • 2011-01-22
  • 2019-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-19
  • 1970-01-01
  • 2022-11-06
  • 2015-12-03
相关资源
最近更新 更多