• python-jenkinsAPI实践


    安装第三方依赖:six,requests,python_jenkins,pbr
    下载地址:https://pypi.tuna.tsinghua.edu.cn/simple

    jenkinsapi基本语法:
    #实例化jenkins对象,连接远程的jenkins master server
    
    
       server=jenkins.Jenkins(jenkins_server_url, username=user_id, password=api_token)
    
    
       #构建job名为job_name的job(不带构建参数)
    
    
       server.build_job(job_name)
    
    
       #String参数化构建job名为job_name的job, 参数param_dict为字典形式,如:param_dict= {"param1":“value1”, “param2”:“value2”} 
    
    
       server.build_job(job_name, parameters=param_dict)
    
    
       #获取job名为job_name的job的相关信息
    
    
       server.get_job_info(job_name)
    
    
       #获取job名为job_name的job的最后次构建号
    
    
       server.get_job_info(job_name)['lastBuild']['number']
    
    
         #获取job名为job_name的job的某次构建的执行结果状态
    
    
       server.get_build_info(job_name,build_number)['result']     
    
    
         #判断job名为job_name的job的某次构建是否还在构建中
    
    
       server.get_build_info(job_name,build_number)['building']




    完整代码
    #
    !/usr/bin/python3 #-*-coding: UTF-8 -*- import xml.etree.ElementTree as ET import jenkins import time import sys from threading import Thread def init_jenkins(): ''' 初始化jenkins连接对象 :return:jenkins对象 ''' server =jenkins.Jenkins('http://xxx/',username='xxx',password='xxx') return server def get_param(buildname): ''' 获取jenkins的参数 :param buildname: :return: ''' # 获取job名为job_name的job的相关信息 job_info=j_server.get_job_config(buildname) #截取参数化部分 job_info = '<properties>' + job_info.split('</properties>')[0].split('<properties>')[1] + '</properties>' tree = ET.fromstring(job_info) para_d = {} paramobj = tree.find('hudson.model.ParametersDefinitionProperty').find('parameterDefinitions') for child in paramobj.findall('hudson.model.StringParameterDefinition'): para_d[child.find('name').text] = child.find('defaultValue').text for child in paramobj.findall('hudson.model.TextParameterDefinition'): para_d[child.find('name').text] = child.find('defaultValue').text return para_d def get_last_version(build_name): ''' :return:最后构建版本号 ''' #获取最后一次构建版本号 return j_server.get_job_info(build_name)['lastBuild']['number'] def is_building(j_server,job_name,last_version): ''' 获取执行状态 :param j_server: :param job_name: :param last_version: :return: ''' return j_server.get_build_info(job_name, int(last_version) + 1)['building'] def is_pedding(j_server,job_name): queue_info = j_server.get_queue_info() if queue_info: for queue_job_info in queue_info: if queue_job_info['task']['name']==job_name: print(job_name,'在jenkins等待队列中,休眠30秒。') return True else: return False else: return False def get_build_stat(j_server,job_name,last_version): ''' 获取构建结果 :param j_server: :param job_name: :param last_version: :return: ''' while True: time.sleep(30) if is_pedding(j_server,job_name): continue if is_building(j_server,job_name,last_version): print(job_name,'构建中,休眠30秒。') else: build_result=j_server.get_build_info(job_name, int(last_version) + 1)['result'] if build_result == 'FAILURE': print(job_name, '版本:', last_version + 1, '构建失败,详细日志登陆jenkins查看!') elif build_result=='SUCCESS': print('构建结果:', build_result) else: print('构建结果未知错误,请登陆jenkins页面查看!') break return j_server.get_build_info(job_name, int(last_version) + 1)['result'] # return j_server.get_build_info(job_name,int(last_version)+1)['result'] def do_build(j_server,job_name,jenkins_param_dict): ''' 执行构建函数 :param j_server: :param job_name: :param jenkins_param_dict: :return: ''' j_server.build_job(job_name, parameters=jenkins_param_dict,token=None) def work(j_server,job_name,jenkins_param_dict,last_version): #执行构建 print(job_name,'开始构建。。。') #构建jenkins任务 do_build(j_server,job_name,jenkins_param_dict) #判断是否执行完 get_build_stat(j_server, job_name, last_version) # if build_result=='FAILURE': # print(job_name,'版本:',last_version+1,'构建失败,详细日志登陆jenkins查看!') # else: # print('构建结果:',build_result) if __name__ == '__main__': active_list = ['bianyi', 'push'] #获取jenkins任务清单 job_name_list = [] #用开发任务测试用 if sys.argv[1]=='dev': for i in sys.argv[2:]: job_name = 'build-' + i + '-dev-manu' job_name_list.append(job_name) # job_name_list=['build-broad-dev-manu','build-cust-dev-manu'] for job_name in job_name_list: j_server = init_jenkins() last_version = get_last_version(job_name) # 获取jenkins参数 jenkins_param_dict = get_param(job_name) p1 = Thread(target=work, args=(j_server, job_name, jenkins_param_dict, last_version,)) p1.start() # 开启进程 else: if sys.argv[-1:][0] not in active_list: print('参数输入异常') exit(0) if len(sys.argv) > 6: print('编译队列要少于5,请分批执行!') exit(0) f = open(r'moudle_list.txt', 'r') dict_ = eval(f.read()) for i in sys.argv[1:-1]: if i not in dict_: print('code输入有误请重启输入!') exit(0) j_server=init_jenkins() if sys.argv[-1:][0] == 'bianyi': for job_code in sys.argv[1:-1]: job_name=dict_[job_code][0] # 获取最后一次编译号 last_version = get_last_version(job_name) # 获取jenkins参数 jenkins_param_dict = get_param(job_name) p1=Thread(target=work,args=(j_server,job_name,jenkins_param_dict,last_version,)) p1.start()#开启进程 else: for job_code in sys.argv[1:-1]: #获取push对应的准发布任务 job_name = dict_[job_code][0] #获取push的任务名 job_push_name=dict_[job_code][1] last_version = get_last_version(job_name) last_push_version=get_last_version(job_push_name) # 获取jenkins参数 jenkins_param_dict = get_param(job_push_name) print(job_name,'最后一次构建版本号为:',dict_[job_code][2]+str(last_version)) jenkins_param_dict["TAG_VERSION"]=dict_[job_code][2]+str(last_version) print(jenkins_param_dict) p1=Thread(target=work,args=(j_server,job_push_name,jenkins_param_dict,last_push_version,)) p1.start()#开启进程
  • 相关阅读:
    下载Instagram的图片
    golang写一个简单的爬虫
    [转载]Go的50度灰:Golang新开发者要注意的陷阱和常见错误
    无法获得锁 /var/lib/dpkg/lock
    RouterOS 设定NAT loopback (Hairpin NAT)回流
    Fix-Dell iDRAC 7 error: RAC0218: The maximum number of user sessions is reached
    Nginx Location配置总结
    vcenter6.7将ESXI所有的端口组迁移到分布式交换机的步骤
    什么是DSCP,如何使用DSCP标记搭配ROS策略
    MTR追踪的好工具
  • 原文地址:https://www.cnblogs.com/kunixiwa/p/14142672.html
Copyright © 2020-2023  润新知