我正在开发一个使用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到底是什么?为什么我的管道作业没有在从属节点上的常规执行器上运行?
答案 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中。我面临同样的问题。我想确定哪些奴隶正在运行什么构建,但我无法区分,因为奴隶的执行者是空的
如果您有任何见解,请分享。