Jenkins取消生成队列

Jenkins取消生成队列,jenkins,jenkins-pipeline,Jenkins,Jenkins Pipeline,我们有多个SCM作业。作业A触发作业B,作业C触发作业D。作业C运行时,如果作业A中有签入,则在作业C完成而不是触发作业D后,作业A被触发,作业D在队列中。一旦作业A完成,则在作业B处于队列中时触发作业D。这是虫子吗?将期望作业C触发作业D,而不管上游作业中的任何SCM更改。您如何解决这个问题?是的,假设您只有一个执行者,这是预期的。首先是一些术语: 队列,这是生成在执行之前的位置,通常是因为所有执行者都很忙 触发,表示将作业的生成添加到队列中 Executor,获取队列中的第一个生成并生成它

我们有多个SCM作业。作业A触发作业B,作业C触发作业D。作业C运行时,如果作业A中有签入,则在作业C完成而不是触发作业D后,作业A被触发,作业D在队列中。一旦作业A完成,则在作业B处于队列中时触发作业D。这是虫子吗?将期望作业C触发作业D,而不管上游作业中的任何SCM更改。您如何解决这个问题?

是的,假设您只有一个执行者,这是预期的。首先是一些术语:

  • 队列,这是生成在执行之前的位置,通常是因为所有执行者都很忙
  • 触发,表示将作业的生成添加到队列中
  • Executor,获取队列中的第一个生成并生成它
现在让我们做一个时间表:

  • C被触发,将构建C#1添加到队列中,构建立即启动,因为没有执行任何操作
  • A被触发并将构建A1添加到队列中,因为唯一的执行器正忙于构建C#1
  • 构建C#1已接近完成,并在最后触发构建D,构建D#1。构建D#1在构建A#1之后立即放入队列
  • 一旦C#1完成,执行者将获取队列中的下一个项目,这恰好是A#1(因为它在队列中存在的时间最长)
  • A#1结束时将B#1添加到队列中,正好在D#1之后
  • D#1是因为它是队列中的第一个而构建的
  • 最后构建了B#1

  • 因此,正如您所能看到的,执行者总是采用队列中最长的构建。有几种方法可以更改此优先级,例如使用,它允许您为某些作业设置更高的优先级,在您的情况下,您应该为作业B和D设置更高的优先级。

    是的,但我有四个执行器,在任何给定时间只有一个在运行。我也尝试过使用上下游作业阻塞,但仍然没有帮助。好吧,这很奇怪,因为我看到作业A和B完全独立于作业C和D,对吗?然后他们应该建立相互独立的,奇怪的。。。当c在构建时,A在队列中吗?如果是,您应该能够通过转到作业A的页面并检查构建历史来了解它为什么没有构建。抱歉,这四个作业都是链接的。当没有SCM更改时,订单将正常执行。我注意到的问题只有在上游或下游作业发生SCM变更时才会发生。SCM触发作业优先。好的,这更有意义。我唯一的猜测是,SCM触发的作业在另一个作业之前进入队列,因此将在另一个作业之前生成。是的,正因为如此,所有作业都无序并在队列中等待。回到我最初的问题,这是一个bug还是有其他方法可以避免?