Jenkins取消构建队列

时间:2017-02-18 08:50:42

标签: jenkins jenkins-pipeline

我们有多个SCM工作。作业A触发作业B和作业C触发作业D.当作业C在作业A中有签入时运行,在作业C完成而不是触发作业D之后,作业A被触发,作业D在队列中。一旦作业A完成,则在作业B进入队列时触发作业D.这是一个错误吗?无论上游作业中的任何SCM变化如何,都会期望作业C触发作业D.你是如何解决这个问题的?

1 个答案:

答案 0 :(得分:0)

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

  • 队列,这是构建在执行之前的地方,通常是因为所有执行者都很忙。
  • 已触发,表示已将作业内容添加到队列中。
  • 执行者,在队列中进行第一次构建并构建它。

现在让我们做一个时间表:

  1. 触发C,将构建C#1添加到队列中并立即开始构建,因为没有执行任何操作
  2. 触发A并将构建A1添加到队列,因为唯一执行者正在忙于构建C#1
  3. 构建C#1即将完成,最后它会触发D的构建,构建D#1。在构建A#1
  4. 后立即将构建D#1放入队列
  5. 一旦C#1结束,执行者将获取队列中的下一个项目,该项目恰好是A#1(因为它在那里的时间最长)。
  6. A#1在D#1
  7. 之后立即将B#1添加到队列中
  8. D#1已构建,因为它是队列中的第一个
  9. 最后建立B#1
  10. 因此,您可以执行,执行程序始终将队列中的构建时间设置为最长。有一些方法可以改变这个优先级,例如使用Priority Sorter Plugin,它允许你为某些工作设置更高的优先级,在你的情况下你应该把更高的优先级放在工作B和D上。