来自jenkins api的节点标签

时间:2013-01-25 23:24:33

标签: jenkins

有什么办法可以从jenkins API中提取节点标签吗? standard

{base_url}/computer/{node}/api

似乎没有任何标签信息。它在其他地方吗?

5 个答案:

答案 0 :(得分:6)

显然,节点标签是节点配置的一部分,因此它们存在于

{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

答案 1 :(得分:5)

ruby client提供了一种通过调用获取配置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 }

答案 2 :(得分:3)

如果您不介意使用BeautifulSoup和urllib2,可以执行此操作以创建由节点名称键入的标签列表字典。不可否认,脆弱和hackish,但与Jenkins ver合作。 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"})]

答案 3 :(得分:3)

这里的Python解决方案通常似乎不再起作用(我在PyPI上发现的jenkinsapi没有某些预期的方法),无论如何,这将需要身份验证令牌,而我无法轻易获得持有。

https://jenkins.internal/computer/api/json?pretty=true将为我提供所有具有assignedLabel结构的所有节点的列表。这对我来说已经足够了(我只需要列出我们使用的标签的清单,如果它们也有描述,那会很好,但可惜,大多数没有)。

jq -r '.computer[].assignedLabels[].name' jenkins-labels.json | sort -u

获取纯文本标签列表。

答案 4 :(得分:1)

我认为这样会好的: HTTP:// {JENKINS_URL} /标签/ {LABEL_NAME} / API / JSON漂亮=真