【问题标题】:Jenkins build returns 'None' statusJenkins 构建返回“无”状态
【发布时间】:2016-01-11 07:48:24
【问题描述】:

我正在尝试使用 python 的jenkinsapi 来自动化一些构建。看起来一切正常,构建成功。但是,当我通过脚本检查状态以确保构建成功时,我得到一个None 值而不是预期的“成功”。如果我打开一个新的 python shell 并查询同一个版本的状态,我确实会得到 'SUCCESS' 值。
我的代码是:

from jenkinsapi.jenkins import Jenkins
from time import sleep

jk = Jenkins(jenkins_url,user,password)
my_job = jk['my_job']
params = {'param_1': 'value_1', 'param_2': 'value_2',...}
build_num = my_job.get_next_build_number()
print(build_num)    # will print the right number, for example 174
my_job.invoke(build_params=params)
sleep(10)
build = my_job.get_build(build_num)
while build.is_running():
    sleep(3)
sleep(10)
print(build.get_status())   # will print 'None'
if build.get_status() != 'SUCCESS':
    sys.exit('Jenkins build failed')

如您所见,我添加了一些“睡眠”以确保这不是延迟问题(也尝试了更长的时间)。我也尝试过使用build.block_until_complete() 方法,但它似乎没有做任何事情。

任何想法为什么我收到此状态,尽管构建成功?
谢谢!

【问题讨论】:

    标签: python python-2.7 jenkins


    【解决方案1】:

    看起来build.py:get_status() 是离线对象的getter,不会自动使构建对象与服务器保持同步,调用is_running() 只会同步一部分作业属性。因此,您要么必须使用build = my_job.get_build(build_num) 刷新/获取新的构建对象,要么强制轮询现有的构建对象build.poll(),然后使用build.get_status() == jenkinsapi.constants.STATUS_SUCCESS 验证状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-14
      • 1970-01-01
      • 2017-09-17
      • 1970-01-01
      • 2011-07-20
      • 2017-06-04
      • 2013-10-12
      相关资源
      最近更新 更多