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

时间:2017-09-26 17:08:49

标签: jenkins jenkins-pipeline

我正在开发一个使用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响应中,它们并没有出现在每个从属节点下的“executors”部分中。相反,它们位于主节点上的oneOffExecutors

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

  

临时添加的执行程序执行不执行的任务   使用常规执行器,就像矩阵项目父构建一样。

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

2 个答案:

答案 0 :(得分:0)

OneOffExecutor,也称为 Flyweight Executor ,是Jenkins主服务器上的一个线程,用于跟踪和协调管道构建。尽管它们被称为 FlyWeights ,它们实际上会给您的主服务器带来很大的负担,例如,当您在从属服务器上的构建将日志发回时,主服务器必须接收这些日志并进行写入。当您的作业归档工件时,它们会被运回主数据库并写入主文件系统。它们是 Flyweight ,从某种意义上说,它们可能空闲,除了等待从属完成任务之外,什么也不做,并且它们占用的内存很少。

在您的示例中, my_pipeline_job_info 可能正在等待节点(从属),可能正在结束,或者可能刚刚出队并且还没有做任何事情,但是在该工作中(或任何时候)管道作业)正在运行,它将在主机上具有Flyweight执行程序。

另请参阅https://serverfault.com/a/981461/236229,以获取有关詹金斯如何在主服务器上显示“一次性”执行程序的说明。

顺便说一下,奴隶也可以拥有OneOffExecutors。 您可以按照所示,以“ OneOffExecutors”的形式监视主服务器上正在运行的内容,但这是一个更完整的URL:

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

但是您也可以用您的实际 slave1 名称代替(master),以查看其他从属上的OneOff执行器。

答案 1 :(得分:-1)

奴隶的执行者应该在空闲时返回一些东西。相反,它出现在oneoffexecutor中。我面临同样的问题。我想确定哪些奴隶正在运行什么构建,但我无法区分,因为奴隶的执行者是空的

如果您有任何见解,请分享。