Jenkins的OneOffExecutor的简单英语解释是什么?

问题描述 投票:0回答:2

我正在编写一个使用 Jenkins REST API 来获取所有当前正在运行的版本的脚本。我可以从

computer/api/json
获取节点列表及其执行者信息,格式为:

{
    "computer": [
        {
            "displayName": "master",
            "executors": [...]
            "oneOffExecutors": [
                {
                    "currentExecutable": {<my_pipeline_job_info>}
                }
            ]
        },
        {
            "displayName": "slave1",
            "executors": [
                {
                    "currentExecutable": null,
                    ...
                },
                {
                    "currentExecutable": null,
                    ...
                }
                ]
        }
    ]
}

在管道定义groovy脚本中,我限制作业仅在从节点上运行:

node("slave_label") {...}

我注意到,虽然它们实际上在从节点上运行,但在上面的 JSON 响应中,它们没有显示在每个从节点下的“执行器”部分中。相反,它们位于主节点上的

oneOffExecutors

除了 JavaDoc 类中的一行之外,我找不到对 oneOffExecutors 的任何好的解释:

临时添加的执行器,用于执行不执行的任务 使用常规执行器,例如矩阵项目父构建。

那么 oneOffExecutor 到底是什么?为什么我的管道作业没有在从节点上的常规执行器上运行?

jenkins jenkins-pipeline
2个回答
1
投票

OneOffExecutor,也称为 Flyweight Executor,是 Jenkins 控制器上的一个线程,用于跟踪和协调管道构建。虽然它们被称为“FlyWeights”,但它们实际上可能会对您的控制器造成重大负载,例如,当您在代理上构建将日志发回时,控制器必须接收这些日志并写入它们。当您的作业归档工件时,它们会被运回控制器并写入控制器文件系统。它们是“Flyweight”,因为除了等待代理完成任务之外,它们可能无所事事,而且它们只需要很少的内存来维护。 在您的示例中,my_pipeline_job_info可能正在等待节点(代理),可能正在结束,或者可能刚刚出列但尚未执行任何操作,但是该作业(或任何管道作业)一直在运行,它控制器上将有一个 Flyweight 执行器。

另请参阅 https://serverfault.com/a/981461/236229,了解 Jenkins 如何在控制器上显示一次性执行器的说明。

顺便说一下,代理也可以有 OneOffExecutors。 您可以将控制器上运行的内容作为“OneOffExecutors”进行监控,如您所示,但这里有一个更完整的 URL:

https://YOUR.JENKINS.URL/computer/(built-in)/api/python?pretty=true&tree=oneOffExecutors[currentExecutable[fullDisplayName,result,id,url]]&depth=1

但是您也可以将

(built-in)
替换为您的实际

agent1

名称,以查看其他代理上的 OneOff Executors。 Jenkins 的早期版本使用名称

(master)
。 Jenkins 的一些中间版本使用了其他术语。
slave 的执行者应该在不空闲时返回一些东西。相反,它显示在 oneoffexecutor 中。我面临着同样的问题。我想确定哪些从站正在运行什么构建,但我无法区分,因为从站的执行者是空的


-1
投票

© www.soinside.com 2019 - 2024. All rights reserved.