【发布时间】:2021-12-17 11:25:36
【问题描述】:
我对 Python-Jenkins 很陌生。我浏览了API page,但没有找到答案。
我在 Jenkins 创建了一个工作,比如 MyJob。我想用python来
- 为 MyJob 添加多个构建,这意味着多次执行
server.build_job('MyJob', params)。 - 随时获取已创建的构建状态之一(已完成或仍在等待),这意味着我随时想要
get_build_info('MyJob', build_id)['result']。
更准确地说,我正在实现一个 Web 服务器,有一些请求要求创建新构建(第 1 点)或查询已创建构建的状态(第 2 点)。
在 API 中,build_id = server.get_job_info('MyJob')['nextBuildNumber'] 可以为我提供下一个版本号,但我无法随时使用 server.get_build_info('MyJob', build_id) 获取此版本的信息,因为如果有一个版本在等待队列中,那么我们无法使用 get_build_info 来获取它的状态,它会抛出异常。
我不明白,我不可能知道一个构建任务何时会被执行,所以当我进行查询时,一个构建可以是(在队列中等待 | 执行 | 完成)中的任何一个,然后我怎样才能获得这些构建的状态?其实我完全不明白为什么get_build_info()不支持构建任务在等待队列中的情况。
================================================ ================
更新:
我尝试了@apr_1985 的建议。下面的代码片段可以给出我想要的,但我不确定是否有更好的方法来做到这一点。
build_id = server.get_job_info('MyJob')['nextBuildNumber']
queue_id = server.build_job('MyJob',params)
...
try:
task = server.get_build_info('MyJob', build_id)
except:
queue = server.get_queue_item(queue_id)
print('I am waiting in queue.\n')
print(queue)
else:
print(task['result'])
print('I am executing/finished.\n')
【问题讨论】: