按标签从 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 对象感兴趣 - 请注意它可以包含多个标签。