zoukankan      html  css  js  c++  java
  • [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='构建中,请稍后获取测试结果'                                                                                           
                                                                                                                          

    方文档:

  • 相关阅读:
    Android开源库
    银行卡的数字检測
    hdu4941 Magical Forest
    android之检測是否有网络
    在Oracle数据库中使用NFS,怎样调优?
    centos+nginx+php-fpm+php include fastcgi_params php页面能訪问但空白,被fastcgi_params与fastcgi.conf害慘了
    漫谈反射
    Android 四大组件学习之BroadcastReceiver二
    【LeetCode】two num 利用comparable接口 对对象进行排序
    扩展功能==继承?
  • 原文地址:https://www.cnblogs.com/kaerxifa/p/12005036.html
Copyright © 2011-2022 走看看