Jenkins中“blocked”、“stuck”、“pending”、“buildable”作业之间的区别

kuarbcqp  于 2023-10-17  发布在  Jenkins
关注(0)|答案(2)|浏览(165)

我在任何地方都找不到这些常见的Jenkins术语的定义。
我还觉得奇怪的是,在指标插件https://wiki.jenkins.io/display/JENKINS/Metrics+Plugin中,所有的“jenkins.june.”指标似乎都属于阻塞状态。

8ljdwjyq

8ljdwjyq1#

队列中的项经过几个阶段,如下所示

(enter) --> waitingList --+--> blockedProjects
                           |        ^
                           |        |
                           |        v
                           +--> buildables ---> pending ---> left
                                    ^              |
                                    |              |
                                    +---(rarely)---+

jenkins.queue.blocked表示Jenkins阻止的作业数量。阻塞的原因可以是下面的任何东西

1.目标标签正忙碌
1.目标节点脱机
1.目标节点正忙碌
1.因为节点(或其保留策略)不接受任务
1.目标标签脱机

jenkins.queue.stuck表示即使所有Node资源都可用或执行器存在问题(如果作业太长时间缺少执行器),作业仍停留在队列中。
jenkins.queue.pending表示作业正在等待下一个executor运行,所有节点资源都是健康的,并为作业保留。
jenkins.queue.buildable返回可构建阶段的作业总数

参考:javadoc.jenkins.io/hudson/model/Queue.html

8iwquhpp

8iwquhpp2#

为了补充Mike's answer,我想知道如何为jenkins.queue.stuck度量定义“太长”。下面是源代码的相关部分:

@Override
        public boolean isStuck() {
            Label label = getAssignedLabel();
            if (label != null && label.isOffline())
                // no executor online to process this job. definitely stuck.
                return true;

            long d = task.getEstimatedDuration();
            long elapsed = System.currentTimeMillis() - buildableStartMilliseconds;
            if (d >= 0) {
                // if we were running elsewhere, we would have done this build ten times.
                return elapsed > Math.max(d, 60000L) * 10;
            } else {
                // more than a day in the queue
                return TimeUnit.MILLISECONDS.toHours(elapsed) > 24;
            }
        }

因此,通过我对代码的阅读,如果出现以下情况,则一个项目被卡在队列中:

  • 它需要一个特定的标签,并且没有带有该标签的执行器在线;或
  • 它在队列中的时间超过其估计持续时间的十倍和一分钟,以两者中较大者为准;或
  • 已经排了24个多小时的队了

希望这对别人有帮助!

相关问题