有什么方法可以从 jenkins API 中提取节点标签?标准:_
{base_url}/computer/{node}/api
似乎没有任何标签信息。是在别的地方吗?
显然,节点标签是节点配置的一部分,因此它们存在于
{base_url}/computer/{node_str}/config.xml
这是我通过python jenkinsapi(类似于作业配置)访问它的技巧,来自node_str
import xml.etree.ElementTree as ET
from jenkinsapi.jenkins import Jenkins
j = Jenkins(...)
n = j.get_node(node_str)
response = n.jenkins.requester.get_and_confirm_status( "%(baseurl)s/config.xml" % n.__dict__)
_element_tree = ET.fromstring(response.text)
node_labels = _element_tree.find('label').text
ruby 客户端提供了一种通过调用获取配置 XML 文件的方法。然后可以处理该文件以提取标签信息。
require "rubygems"
require "jenkins_api_client"
# Initialize the client by passing in the server information
# and credentials to communicate with the server
client = JenkinsApi::Client.new(
:server_ip => "127.0.0.1",
:username => "awesomeuser",
:password => "awesomepassword"
)
# Obtain the XML of the desired node
xml = client.node.get_config("nodename")
# Extract label information
xml =~ /<label>(.*)<\/label)/
# As we can have multiple space-separated labels, we need to split them
labels = []
$1.split(" ").each { |label| labels << label }
如果您不介意使用 BeautifulSoup 和 urllib2,您可以这样做来创建一个由节点名称键入的标签列表字典。诚然,脆弱和骇人听闻,但与 Jenkins 版本一起工作。1.512
JENKINS_URL = "http://jenkins.mycompany.com"
from jenkinsapi import jenkins
from BeautifulSoup import BeautifulSoup
from urllib2 import urlopen
node_labels = dict()
jenkins_obj = jenkins.Jenkins(JENKINS_URL)
node_names = jenkins_obj.get_node_dict().keys()
for node_name in node_names:
if node_name is not "master":
req = urlopen('{}/computer/{}/'.format(JENKINS_URL,node_name))
soup = BeautifulSoup(req.read())
node_labels[node_name] = [tag.text for tag in soup.findAll("a", {"class":"tag0 model-link"})]
这里的 Python 解决方案通常似乎不再起作用(jenkinsapi
我可以在 PyPI 上找到的没有一些预期的方法),无论如何,它需要我无法轻易获得的身份验证令牌。
https://jenkins.internal/computer/api/json?pretty=true会给我一个所有节点的列表以及每个节点的assignedLabel
结构。这对我来说已经足够了(我只需要一份我们使用的标签的清单——如果它们也有描述就好了,但唉,大多数都没有)。
jq -r '.computer[].assignedLabels[].name' jenkins-labels.json | sort -u
以纯文本形式获取标签列表。
我认为这可以:http://{JENKINS_URL}/label/{LABEL_NAME}/api/json?pretty=true