python库实战 - jenkins

2020-05-16  本文已影响0人  许忠慧

官方api文档:https://python-jenkins.readthedocs.io/en/latest/api.html

使用jenkins的时候发现一个问题,虽然jenkins可以定时构建,但是构建的时候只能使用默认参数,或者新建一个定义好参数的构建任务。当本身jenkins上构建任务就比较多的情况下看起来就会比较繁杂,因此使用python做了一个自动化构建的脚本

一、安装

pip install python-jenkins

二、实际使用脚本

from jenkins import Jenkins
import sys, os
import datetime
import time
"""
定时自动在jinkins上进行构建操作
"""


# ================================================ 需要手动配置的区域
# trunk服务器更新(QA_trunk, RD_trunk)
job_name_server = "QA_更新服务器版本"
RD_dev_server = {
"branch_name":"dev-A", 
"target_server":"dev_a", 
"is_rebuild":True, 
"restart_server":True
}


# 客户端更新(android_trunk)
job_name_android_dev = "got_global_android_devA"
RDdev_android = {
"label":"master", 
"channel":"RDdev", 
"version":"0.0.1", 
"build_res":True, 
"bigPackage":True, 
"smallPackage":False, 
"isOBBVersion":False, 
"bundle_version_code":"1", 
"log":True,
"development":False, 
"submit_qm":True, 
"branch":"dev-A", 
"build_supersdk_channel":False, 
"sdk_channel":"", 
"obb_sdk_channel":"", 
"resCompareVersion":"",
"isPoco":True
}

# 客户端更新(ios_trunk)
job_name_ios_dev = "got_global_ios_devA"
RDdev_ios = {
"label":"master", 
"channel":"RDdev", 
"version":"0.0.1", 
"build_package":True,
"build_ipa":True, 
"build_res":True, 
"smallPackage":False,  
"bundle_version_code":"1", 
"log":True,
"development":False, 
"submit_qm":True, 
"branch":"dev_a", 
"gt":False,
"build_sdk_channel":False, 
"sdk_channel":"", 
"resCompareVersion":""
}

build_time = [1, 13, 19]            # 填入打包时间,24小时制1-23



# ================================================= 脚本区域
# 定时构建函数,传入自动构建任务
def timedBuild(jobName, buildingParm, buildType):QA
    # 创建jenkins链接实例QA
    jen_server = Jenkins(url="http://127.0.0.1:8080/", username="QA", password="QA")  # ip隐藏
    jen_client = Jenkins(url="http://127.0.0.2:8080//", username="QA", password="QA")  # ip隐藏
    if buildType == "client":
        print(datetime.datetime.now().strftime('%Y-%m-%d  %H:%M:%S'), jobName, buildType)
        jen_client.build_job(jobName, buildingParm)     # 构建 客户端
    else:
        print(datetime.datetime.now().strftime('%Y-%m-%d  %H:%M:%S'), jobName, buildType)
        jen_server.build_job(jobName, buildingParm)     # 构建 服务器
            
        

if __name__ == '__main__':
    while True:
        now_time = datetime.datetime.now().strftime('%H')  # 获取当前时间,只获取小时
        if int(now_time) in build_time:
            timedBuild(job_name_android_dev, RDdev_android, "client")    # 打包安卓
            timedBuild(job_name_ios_dev, RDdev_ios, "client")            # 打包ios
            timedBuild(job_name_server, RD_dev_server, "server")         # 更新服务器 QAdev
            print("finished build_package ~!")
            time.sleep(3600)        

三、常用函数说明

 # 导入
import jenkins  

# 实例化jenkins对象,连接远程的jenkins 
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为字典形式
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']  
上一篇 下一篇

猜你喜欢

热点阅读