问题背景:
在完善测试平台代码时:
后端代码中,发现只要调用执行任务接口就返回error:0,跟构建结果与测试结果无关
前端代码中,发现后端的返回值只能走前端的if分支
综上,修改目的为:根据构建结果来返回前端不同的响应
测试平台代码:
问题1:
使用get_status方法无法获取当前构建任务的结果,只能获取上次构建任务的结果
问题2:
按照老师的方法,去判断biuldnumber是否变化,来进一步判断是否构建完成,从而获取构建结果,但结果依然不行,获取None
问题3:
使用get console方法来打印构建信息,发现无法获取完整的构建信息
想请教老师怎么处理这个问题
xiaoxi
(测开17期学委-晓兮)
4
我贴个 @hogwarts_wenzi 蚊子大佬写的调用JenkinsApi查询是否正在构建运行中的代码出来吧,你看看有合适你的没
# 循环判断Jenkins是否打包完成
while True:
if not my_job.is_queued_or_running():
# 获取最新一次打包信息
count_build = my_job.get_build(build_num)
# 获取打包开始时间
start_time = count_build.get_timestamp() + datetime.timedelta(hours=8)
# 获取打包日志
console_out = count_build.get_console()
# 获取运行状态
status = count_build.get_status()
# 获取变更内容
change = count_build.get_changeset_items()
log.info("" + str(start_time) + "发起的" + my_job_name + "构建已完成, 构建的状态为:" + status)
p2 = re.compile(r".*ERROR.*")
err_list = p2.findall(console_out)
log.info("打包日志为:" + console_out)
if status == "SUCCESS":
if len(change)> 0:
for data in change:
for file_list in data["affectedPaths"]:
log.info(" 发起的" + my_job_name + "变更的类:" + file_list)
log.info(" 发起的" + my_job_name + "变更的备注:" + data["msg"])
log.info(" 发起的" + my_job_name + "变更的提交人" + data["author"]["fullName"])
else:
log.info(" 发起的" + my_job_name + "构建没有变更内容")
if len(err_list) > 0:
log.info(" 构建的" + my_job_name + "构建状态为成功,但包含了以下错误:")
for error in err_list:
log.error(error)
else:
if len(err_list) > 0:
log.warning(" 构建的" + my_job_name + "包含了以下错误:")
for error in err_list:
log.error(error)
break
谢谢分享,我试了一下,发现is_queued_or_running()这个方法可行,对象是构建任务的实例化
再分享一下,我自己的解决方案(没有蚊子老师那么完善,基本单线程可行)
def get_build_result(cls,nodeid):
jenkins_job = Jenkins(cls.baseurl, cls.username, cls.password).get_job(nodeid)
url = jenkins_job.__dict__['_data']['lastBuild']['url']
number = jenkins_job.__dict__['_data']['lastBuild']['number']
obj = Build(url, number, jenkins_job)
# 等待任务完成,如果任务在运行则等待一秒
obj.block()
# 反复获取构建状态,直到不等于None,返回状态结果
while True:
# 因为get_status只是获取一次结果,所以需要构建对象反复刷新,从而构建结果反复刷新来获取结果
obj = Build(url, number, jenkins_job)
result = obj.get_status()
if result != None:
return result