【Python】从Jenkins下载最近一次成功构建的安装包

简介:
#-*- coding:utf-8 -*-
from case.beatles.test_beatles import TestBeatles
from framework.logger import Logger
from page.ios.beatles.jenkins_page import Jenkins_Tool

class DownloadApp(TestBeatles):

def testDownloadfromJenkins(self):
try:
jp = Jenkins_Tool()
jp.download_app_from_jenkins()
except Exception, e:
Logger.error(e)
self.save_screenshot()
self.fail(e.message)



#-*- coding:utf-8 -*-
from datetime import datetime
import urllib
import jenkins
import os

job_names = ['job-ios','job_android']
username = 'Jenkins用户名'
password = 'Jenkins密码'
base_ios_debug_download_url = 'https://xxx/ios/Debug/'
base_android_debug_download_url = 'https://xxx/android/Debug/'
ios_app_suffix = '.ipa'

class Jenkins_Tool():

def __init__(self):
self.jenkins_url = 'http://jenkins host url'
self.sever = jenkins.Jenkins(self.jenkins_url, username=username, password=password)

# 获取最新构建号
def get_build_number(self, job_name):
lastest_completed_build_number = self.sever.get_job_info(job_name)['lastCompletedBuild']['number']
# print(lastest_completed_build_number)
return lastest_completed_build_number

# 获取Jenkins下的所有job
def get_all_jobs(self):
all_josbs = self.sever.get_all_jobs()
print(self.sever.jobs_count())
for job in all_josbs:
print(job['name'])

# 获取构建日志
def get_build_console_output(self, job_name):
number = self.get_build_number(job_name)
resps = (self.sever.get_build_console_output(job_name, number))
print(resps)

# 生成ios下载的绝对URL
def getIosAbsoluteURL(self, job_name):
ios_download_url = base_ios_debug_download_url + str(self.get_build_number(job_name)) + '/' + self.getPkgName(job_name)
return ios_download_url

# 生成android下载的绝对URL
def getAndroidAbsoluteURL(self, job_name):
android_download_url = base_android_debug_download_url + str(self.get_build_number(job_name)) + '/' + self.getPkgName(job_name)
return android_download_url

# 拼接包名
def getPkgName(self, job_name):
number = self.get_build_number(job_name)
if job_name == 'carpool_iosbuild':
pkg_name = 'iOS包名前缀' + str(number) + '_.ipa'
# print(pkg_name)
return pkg_name
else:
pkg_name = 'Android包名.apk'
return pkg_name

# 从Jenkins下载最新ios App
def download_ios_app(self, job_name):
local = os.path.join('/Users/didi/Downloads/', self.getPkgName(job_name))
ios_download_url = self.getIosAbsoluteURL(job_name)
print('开始下载iOS App...')
urllib.urlretrieve(ios_download_url, local)
print('iOS App 下载完成')

# 从Jenkins下载最新android App
def download_android_app(self, job_name):
local = os.path.join('/Users/didi/Downloads/', self.getPkgName(job_name))
android_download_url = self.getAndroidAbsoluteURL(job_name)
print('开始下载Android App...')
urllib.urlretrieve(android_download_url, local)
print('Android App 下载完成')

# 下载进度
def callbackfunc(blocknum, blocksize, totalsize):
'''回调函数
@blocknum: 已经下载的数据块
@blocksize: 数据块的大小
@totalsize: 远程文件的大小
'''
percent = 100.0 * blocknum * blocksize / totalsize
if percent > 100:
percent = 100
print "%.2f%%" % percent

# 重命名ios app
def rename(self, file_dir, file_name):
os.chdir(file_dir) #切换目录
# print "当前目录为: %s" % os.listdir(os.getcwd())
for root, dirs, files in os.walk(file_dir):
os.listdir(os.getcwd()) # 获得当前目录中的内容
for file in files:
if os.path.splitext(file)[1] == '.ipa':
os.rename(file_name, 'xxx'+ios_app_suffix)
print('ios app已重命名为 xxx.ipa')
return

#从Jenkins下载最新的构建包
def download_app_from_jenkins(self):
jt = Jenkins_Tool()
start_download_time = datetime.now() # 开始下载时间
jt.download_ios_app('ios-job')
jt.rename('/Users/didi/Downloads/',jt.getPkgName('ios-job'))
jt.download_android_app('android-job')
end_download_time = datetime.now() # 下载完成时间
print('Android & iOS下载耗时:' + str((end_download_time - start_download_time).seconds))
return True





相关文章
|
8天前
|
机器学习/深度学习 数据挖掘 Python
Python编程入门——从零开始构建你的第一个程序
【10月更文挑战第39天】本文将带你走进Python的世界,通过简单易懂的语言和实际的代码示例,让你快速掌握Python的基础语法。无论你是编程新手还是想学习新语言的老手,这篇文章都能为你提供有价值的信息。我们将从变量、数据类型、控制结构等基本概念入手,逐步过渡到函数、模块等高级特性,最后通过一个综合示例来巩固所学知识。让我们一起开启Python编程之旅吧!
|
16天前
|
弹性计算 数据管理 数据库
从零开始构建员工管理系统:Python与SQLite3的完美结合
本文介绍如何使用Python和Tkinter构建一个图形界面的员工管理系统(EMS)。系统包括数据库设计、核心功能实现和图形用户界面创建。主要功能有查询、添加、删除员工信息及统计员工数量。通过本文,你将学会如何结合SQLite数据库进行数据管理,并使用Tkinter创建友好的用户界面。
从零开始构建员工管理系统:Python与SQLite3的完美结合
|
3天前
|
存储 API 数据库
使用Python和Flask构建简单的RESTful API
使用Python和Flask构建简单的RESTful API
|
29天前
|
数据采集 JSON 数据处理
抓取和分析JSON数据:使用Python构建数据处理管道
在大数据时代,电商网站如亚马逊、京东等成为数据采集的重要来源。本文介绍如何使用Python结合代理IP、多线程等技术,高效、隐秘地抓取并处理电商网站的JSON数据。通过爬虫代理服务,模拟真实用户行为,提升抓取效率和稳定性。示例代码展示了如何抓取亚马逊商品信息并进行解析。
抓取和分析JSON数据:使用Python构建数据处理管道
|
13天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
利用Python和TensorFlow构建简单神经网络进行图像分类
利用Python和TensorFlow构建简单神经网络进行图像分类
39 3
|
13天前
|
开发框架 前端开发 JavaScript
利用Python和Flask构建轻量级Web应用的实战指南
利用Python和Flask构建轻量级Web应用的实战指南
41 2
|
13天前
|
机器学习/深度学习 JSON API
Python编程实战:构建一个简单的天气预报应用
Python编程实战:构建一个简单的天气预报应用
32 1
|
13天前
|
机器学习/深度学习 数据采集 搜索推荐
利用Python和机器学习构建电影推荐系统
利用Python和机器学习构建电影推荐系统
31 1
|
22天前
|
JSON API 数据格式
如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架
本文介绍了如何使用Python和Flask构建一个简单的RESTful API。Flask是一个轻量级的Web框架,适合小型项目和微服务。文章从环境准备、创建基本Flask应用、定义资源和路由、请求和响应处理、错误处理等方面进行了详细说明,并提供了示例代码。通过这些步骤,读者可以快速上手构建自己的RESTful API。
26 2
|
22天前
|
数据采集 存储 机器学习/深度学习
构建高效的Python网络爬虫
【10月更文挑战第25天】本文将引导你通过Python编程语言实现一个高效网络爬虫。我们将从基础的爬虫概念出发,逐步讲解如何利用Python强大的库和框架来爬取、解析网页数据,以及存储和管理这些数据。文章旨在为初学者提供一个清晰的爬虫开发路径,同时为有经验的开发者提供一些高级技巧。
14 1
下一篇
无影云桌面