[Python]python-jenkins获取正在构建中的job

Posted wangju003

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Python]python-jenkins获取正在构建中的job相关的知识,希望对你有一定的参考价值。

需求:

我现在需要完成1个接口,这个接口会启动jenkins构建jobA,

jobA构建结束, 返回job的构建结果 

思路:

首先使用get_job_info获取最后1次构建的构建序号,然后再通过get_build_info根据最后1次构建序号,来获取最后1次的构建结果

lastbuildNumber=server.get_job_info(name)[lastBuild][number]
build_state = server.get_build_info(name,lastbuildNumber)[result]

遇到问题:

但困难是,通过api启动jenkins构建job,这个job总会有一段pending期,可能会是在4~6秒之间

如果我在这4~6秒之间使用get_build_info去获取Job的构建结果,它获取的将不是我想要的"最后1次"构建结果,而获取到的会是"上1次"构建结束之后的构建结果 

举例说明:

当前构建序列号是505

我启动job后,构建序号是506,但这次构建正处于pending期

所以获取到的lastbuildNumber值并不是506,而是505

这样,当我通过get_build_info(name,lastbuildNumber)获取到的构建信息就是第505次构建的信息,而我期望获得是第506次构建信息 

解决办法:

get_queue_info()这个方法可以获取正在排队构建的job队列 即pending状态中的所有job,如果没有 pending状态的job即返回1个空列表

我们可以这样判断:

通过get_queue_info获取当前正在构建的job列表

轮询get_queue_info,直到jobA不出现在这个队列中,说明已经成功启动了JobA 

代码示例:


queue_info=server.get_q
print(queue_info)
if queue_info:                                                                                                        
    for queue_job_info in queue_info:                                                                                 
        if queue_job_info[task][name] == export_apk:                                                            
            msg=pending期,排队构建中                                                                                      
            print()                                                                                                   
else:                                                                                                                 
    #获取job的最后次构建号                                                                                                     
    lastbuildNumber=server.get_job_info(name)[lastBuild][number]                                                  
    build_state = server.get_build_info(name,lastbuildNumber)[result]                                               
    print(build_state,type(build_state)) #构建结束 SUCCESS|FAILURE<class ‘str‘>    构建中None  None <class ‘NoneType‘>       
    if build_state == SUCCESS:                                                                                      
        msg=构建成功                                                                                                    
        result=1111                                                                                                
        # return ‘测试结果‘                                                                                               
    elif build_state == FAILURE:                                                                                    
        msg = 构建失败                                                                                                  
        result =22222                                                                                               
    elif build_state is None:                                                                                         
        msg=构建中,请稍后获取测试结果                                                                                           
                                                                                                                      

 

 

 

方文档:

以上是关于[Python]python-jenkins获取正在构建中的job的主要内容,如果未能解决你的问题,请参考以下文章

打造专属测试平台2-使用Python-Jenkins模块调用Jenkins API,修改Job配置并运行

python后端代码执行jenkins

python jenkins-api

python字符串学习之二

python实现同服站点地址获取

蓝桥杯选拔赛真题03python求和 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析