按标签从 jenkins 节点列表获取 - 按 REST API
Get from jenkins list of nodes by label - by REST API
我需要获取包含特定标签的节点列表。
我知道如何做到这一点,方法是使用 Jenkins REST API 获取整个节点列表,然后逐个节点获取 REST API 并检查其标签 - 但它有很多 API 电话。
我还可以创建一些作业,将标签作为参数写入某些位置节点列表 - 但它是一种糟糕的方式,因为远程触发的 Jenkins 作业没有 return 值,我不知道它完成了,需要从其他一些地方读取结果将工作保存在那里。
我需要一些方法,通过一次 API 调用,我将获得包含给定标签的节点列表。
您可以 运行 单个 API 调用 <JENKINS_URL>/computer/api/json
(或 <JENKINS_URL>/computer/api/python
调用 python api),其中 return 所有节点及其属性的列表。
其中一个属性是标签 - 所以只需遍历所有节点并提取包含所需标签的节点。
这是 returned 对象的示例:
{
"_class" : "hudson.model.ComputerSet",
"busyExecutors" : 0,
"computer" : [
{
"_class" : "hudson.model.Hudson$MasterComputer",
"actions" : [
],
"assignedLabels" : [
{
"name" : "built-in"
}
],
"description" : "the Jenkins controller's built-in node",
"displayName" : "Built-In Node",
"executors" : [
{
},
{
}
],
"icon" : "symbol-computer",
"iconClassName" : "symbol-computer",
"idle" : true,
"jnlpAgent" : false,
"launchSupported" : true,
"loadStatistics" : {
"_class" : "hudson.model.Label"
},
"manualLaunchAllowed" : true,
"monitorData" : {
"hudson.node_monitors.SwapSpaceMonitor" : {
"_class" : "hudson.node_monitors.SwapSpaceMonitor$MemoryUsage2",
"availablePhysicalMemory" : 6938730496,
"availableSwapSpace" : 6906019840,
"totalPhysicalMemory" : 16885276672,
"totalSwapSpace" : 21046026240
},
"hudson.node_monitors.TemporarySpaceMonitor" : {
"_class" : "hudson.node_monitors.DiskSpaceMonitorDescriptor$DiskSpace",
"timestamp" : 1653907906021,
"path" : "C:\Windows\Temp",
"size" : 426696622080
},
"hudson.node_monitors.DiskSpaceMonitor" : {
"_class" : "hudson.node_monitors.DiskSpaceMonitorDescriptor$DiskSpace",
"timestamp" : 1653907905929,
"path" : "C:\ProgramData\Jenkins\.jenkins",
"size" : 426696622080
},
"hudson.node_monitors.ArchitectureMonitor" : "Windows 10 (amd64)",
"hudson.node_monitors.ResponseTimeMonitor" : {
"_class" : "hudson.node_monitors.ResponseTimeMonitor$Data",
"timestamp" : 1653907905941,
"average" : 0
},
"hudson.node_monitors.ClockMonitor" : {
"_class" : "hudson.util.ClockDifference",
"diff" : 0
}
},
"numExecutors" : 2,
"offline" : false,
"offlineCause" : null,
"offlineCauseReason" : "",
"oneOffExecutors" : [
],
"temporarilyOffline" : false
}
],
"displayName" : "Nodes",
"totalExecutors" : 2
}
您对 assignedLabels
对象感兴趣 - 请注意它可以包含多个标签。
我需要获取包含特定标签的节点列表。
我知道如何做到这一点,方法是使用 Jenkins REST API 获取整个节点列表,然后逐个节点获取 REST API 并检查其标签 - 但它有很多 API 电话。 我还可以创建一些作业,将标签作为参数写入某些位置节点列表 - 但它是一种糟糕的方式,因为远程触发的 Jenkins 作业没有 return 值,我不知道它完成了,需要从其他一些地方读取结果将工作保存在那里。
我需要一些方法,通过一次 API 调用,我将获得包含给定标签的节点列表。
您可以 运行 单个 API 调用 <JENKINS_URL>/computer/api/json
(或 <JENKINS_URL>/computer/api/python
调用 python api),其中 return 所有节点及其属性的列表。
其中一个属性是标签 - 所以只需遍历所有节点并提取包含所需标签的节点。
这是 returned 对象的示例:
{
"_class" : "hudson.model.ComputerSet",
"busyExecutors" : 0,
"computer" : [
{
"_class" : "hudson.model.Hudson$MasterComputer",
"actions" : [
],
"assignedLabels" : [
{
"name" : "built-in"
}
],
"description" : "the Jenkins controller's built-in node",
"displayName" : "Built-In Node",
"executors" : [
{
},
{
}
],
"icon" : "symbol-computer",
"iconClassName" : "symbol-computer",
"idle" : true,
"jnlpAgent" : false,
"launchSupported" : true,
"loadStatistics" : {
"_class" : "hudson.model.Label"
},
"manualLaunchAllowed" : true,
"monitorData" : {
"hudson.node_monitors.SwapSpaceMonitor" : {
"_class" : "hudson.node_monitors.SwapSpaceMonitor$MemoryUsage2",
"availablePhysicalMemory" : 6938730496,
"availableSwapSpace" : 6906019840,
"totalPhysicalMemory" : 16885276672,
"totalSwapSpace" : 21046026240
},
"hudson.node_monitors.TemporarySpaceMonitor" : {
"_class" : "hudson.node_monitors.DiskSpaceMonitorDescriptor$DiskSpace",
"timestamp" : 1653907906021,
"path" : "C:\Windows\Temp",
"size" : 426696622080
},
"hudson.node_monitors.DiskSpaceMonitor" : {
"_class" : "hudson.node_monitors.DiskSpaceMonitorDescriptor$DiskSpace",
"timestamp" : 1653907905929,
"path" : "C:\ProgramData\Jenkins\.jenkins",
"size" : 426696622080
},
"hudson.node_monitors.ArchitectureMonitor" : "Windows 10 (amd64)",
"hudson.node_monitors.ResponseTimeMonitor" : {
"_class" : "hudson.node_monitors.ResponseTimeMonitor$Data",
"timestamp" : 1653907905941,
"average" : 0
},
"hudson.node_monitors.ClockMonitor" : {
"_class" : "hudson.util.ClockDifference",
"diff" : 0
}
},
"numExecutors" : 2,
"offline" : false,
"offlineCause" : null,
"offlineCauseReason" : "",
"oneOffExecutors" : [
],
"temporarilyOffline" : false
}
],
"displayName" : "Nodes",
"totalExecutors" : 2
}
您对 assignedLabels
对象感兴趣 - 请注意它可以包含多个标签。