【问题标题】:How to use Python-Jenkins to get multiple build status at any time?如何使用 Python-Jenkins 随时获取多个构建状态?
【发布时间】:2021-12-17 11:25:36
【问题描述】:

我对 Python-Jenkins 很陌生。我浏览了API page,但没有找到答案。

我在 Jenkins 创建了一个工作,比如 MyJob。我想用python来

  1. 为 MyJob 添加多个构建,这意味着多次执行 server.build_job('MyJob', params)
  2. 随时获取已创建的构建状态之一(已完成或仍在等待),这意味着我随时想要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')

【问题讨论】:

    标签: python jenkins


    【解决方案1】:

    您需要使用get_queue_item 获取排队构建

    我猜 API 在开始运行之前不会将构建视为构建。

    您可以尝试获取构建信息,如果它抛出错误(因为它在队列中)然后将其从队列中拉出?

    遗憾的是,这似乎不是文档记录最好的模块,因此每次调用返回的内容有点神秘,无需经过反复试验。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多