python - Jenkins 构建返回 'None' 状态

标签 python python-2.7 jenkins

我正在尝试使用 python 的 jenkinsapi 来自动化一些构建。看起来一切正常,构建成功。但是,当我通过脚本检查状态以确保构建成功时,我得到一个 None 值,而不是预期的“SUCCESS”。如果我打开一个新的 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')

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

尽管构建成功,但我为什么会收到此状态,有什么想法吗?
谢谢!

最佳答案

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

关于python - Jenkins 构建返回 'None' 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34716465/

相关文章:

python - 我在运行 train.py 时遇到问题,我很困惑

python - 从 Pandas 数据框中获取数组的子集

Python 分析 : What does "method ' poll' of 'select.poll' objects"?

python - 如何从 Pandas 的数据框中提取单元格值

python - 如何在 Python 上使用随机运算符进行计算

ios - Jenkins 在使用 Cocoapods 构建 Xcode 项目时返回 "unknown error -1=ffffffffffffffff"

.net - 在 Ubuntu 机器上通过 jenkins 发布 .net MVC 解决方案的代码

python - 如何单步执行 Ipython 中的 help() 文本?

python - 如何使这个 Python 代码块简短而高效

jenkins - 没有这样的 DSL 方法 `stages`