def get_running_builds():
builds = []
nodes = server.get_nodes()
for node in nodes:
# the name returned is not the name to lookup when
# dealing with master :/
if node['name'] == 'Built-In Node':
continue
if node['name'] == 'master':
node_name = '(master)'
else:
node_name = node['name']
try:
info = server.get_node_info(node_name, depth=2)
except server.JenkinsException as e:
# Jenkins may 500 on depth >0. If the node info comes back
# at depth 0 treat it as a node not running any jobs.
if ('[500]' in str(e) and
server.get_node_info(node_name, depth=0)):
continue
else:
raise
for executor in info['executors']:
executable = executor['currentExecutable']
if executable and 'number' in executable:
#print(f'{executable}')
executor_number = executor['number']
build_number = executable['number']
url = executable['url']
m = re.search(r'/job/([^/]+)/.*', urlparse(url).path)
job_name = m.group(1)
builds.append({'name': executable['fullDisplayName'],
'number': build_number,
'url': url,
'node': node_name,
'executor': executor_number,
'timestamp': executable['timestamp']})
return builds
7条答案
按热度按时间bgibtngc1#
在Jenkins中,jobs和build经常混淆,特别是因为jobs经常被称为“build jobs”。
*作业(或“生成作业”或“项目”)包含描述要运行的内容以及如何运行的配置。
*组建是工作的执行项目。组建包含开始和结束时间、状态、记录日志等相关信息。
如需详细信息,请参阅https://wiki.jenkins-ci.org/display/JENKINS/Building+a+software+project。
如果您需要当前正在构建的作业(即,具有一个或多个正在运行的构建),最快的方法是使用REST API和XPath来过滤以
_anime
结尾的颜色,如下所示:会给予你这样的信息:
Jenkins使用
color
字段来指示作业的状态,其中_anime
后缀指示作业当前正在生成。不幸的是,这不会给予你任何关于实际运行的build的信息。作业的多个示例可能同时运行,并且运行的build不总是最后启动的。
如果您想列出所有正在运行的构建,您也可以使用REST API来快速获得答案,如下所示:
会给予你这样的东西:
在这里你可以看到一个当前正在运行的构建的列表。你需要解析URL来区分作业名称和构建号。注意
my_first_job
有两个当前正在运行的构建。rbl8hiat2#
我有一个使用View Job Filters Plugin定义的视图,它只过滤当前正在运行的作业,然后你可以在视图页面上使用
/api/json
来只查看正在运行的作业。更新
选择 * 编辑视图 * →*作业筛选器→添加作业筛选器 * ▼→构建状态过滤器
jgwigjjp3#
有点小技巧,但我认为当你在
/jenkins/api/json?pretty=true
上执行GET
时,你可以通过查看作业对象中的颜色键来推断当前正在运行哪些作业。如果Jenkins中给定作业的“球”图标是动画的,我们就知道它正在运行。查看JSON响应中的作业对象数组:
在这种情况下,
"color" : "blue_anime"
表示作业当前正在运行,"color" : "blue"
表示作业未运行。希望这对你有帮助。
kse8i1jr4#
元帅输出和过滤器为“建筑:true”,以过滤掉无关的内容(希望这有帮助):
会给予你这样的信息:
a5g8bdjr5#
您可以使用Jenkins树API来实现这一点,使用如下所示的端点:
如果访问
<job-endpoint>/lastBuild/api/json
,您可以看到可以使用lastBuild
中的哪些属性。e1xvtsh36#
我也遇到过类似的问题,在我重新启动jenkins之后,一些pipeline构建陷入了building状态(pipeline作业应该是持久的,可以恢复,但大多数时候它们会无限期地陷入)。
这些构建不使用执行程序,因此找到它们的唯一方法是打开每个作业。
当项目被视为正在建设时,所有其他答案似乎都适用,即:最后一个版本仍在构建。2但他们忽略了过去的版本仍在构建。
下面的查询对我很有效,它为我提供了所有当前正在运行的版本,即:它们没有结果。
http://localhost:8080/api/xml?tree=jobs[name,builds[fullDisplayName,id,number,timestamp,duration,result]]&xpath=/hudson/job/build[count(result)=0]&wrapper=builds
i7uaboj47#
没有什么工作我正常。我复制和修改的代码形式python-jenkins。因为主节点名称改变,它是给予例外。不想依赖插件。
时间戳以毫秒为单位给出时间。