詹金斯建立了回报,没有'状态

时间:2016-01-11 07:48:25

标签: python python-2.7 jenkins

我正在尝试使用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()方法,但它似乎没有做任何事情。

尽管构建成功,但是为什么我会获得这种状态的任何想法? 谢谢!

1 个答案:

答案 0 :(得分:1)

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