使用 Python 书写项目打包程序(已经存在 shell 的脚本,经过对比 Python 脚本的执行过程更加的可控人性化实现的功能相同)

 #!/usr/bin/env python
# _*_coding:utf-8_*_
# author: 'Edward.Liu'
# dateTime: '15/12/9'
# motto: 'Good memory as bad written'
import datetime, time
import os
import shutil
import subprocess
import tarfile class Packages(object):
def __init__(self):
self.SVN_Checked_Directory = "/install/online/"
self.Project_Directory_F = "%scybershop-front/target" % self.SVN_Checked_Directory
self.Project_Directory_B = "%scybershop-web/target" % self.SVN_Checked_Directory
self.Upload_Directory = "/software/backwar/"
self.Project_Directory_F_Name = "cybershop-front-0.0.1-SNAPSHOT.war"
self.Project_Directory_B_Name = "cybershop-web-0.0.1-SNAPSHOT.war"
self.density_name = ['pro', 'demo', 'ptest']
self.bulid_home = "/install/maven/bin/mvn"
self.date_time = datetime.datetime.now().strftime('%Y-%m-%d-%H') def Subervison_Check(self):
global SVN_NUMBER
try:
while True:
SVN_NUMBER = raw_input("\033[32mPleae Input SVN Update Number:\033[0m").strip()
if SVN_NUMBER.isdigit():
SVN_NUMBER = int(SVN_NUMBER)
if os.path.exists(self.SVN_Checked_Directory):
print "------------------------------"
os.chdir(self.SVN_Checked_Directory)
svn_update = "/usr/bin/svn update -r %s" % SVN_NUMBER
subprocess.call(svn_update, shell=True)
break
else:
print "++++++++++++++++++++++++++++++"
os.makedirs(self.SVN_Checked_Directory)
os.chdir(self.SVN_Checked_Directory)
svn_update = "/usr/bin/svn update -r %s" % SVN_NUMBER
subprocess.call(svn_update, shell=True)
break
else:
print "\033[31mPlease SVN Number\033[0m"
except KeyboardInterrupt:
print 'ctrl+d or z' def Bulid(self):
global env
# 编译项目(分环境)
# 获取生成项目的文件名-- get
bulided_File_Path_F = "%s/%s" % (self.Project_Directory_F, self.Project_Directory_F_Name)
# ---get end
# 编译环境选择--- select---> Maven
for index, value in enumerate(self.density_name):
print index, "Carrefour" + "---->" + value
try:
while True:
Chose_ENV = raw_input("\033[32mChose Density Environment:\033[0m")
if Chose_ENV.isdigit():
Chose_ENV = int(Chose_ENV)
env = self.density_name[Chose_ENV]
try:
if self.density_name[Chose_ENV] == 'pro':
os.chdir(self.SVN_Checked_Directory)
bulid_command = "%s clean install -PcarrefourPro -DskipTests" % self.bulid_home
subprocess.call(bulid_command, shell=True)
if os.path.isfile(bulided_File_Path_F):
print "\033[32mBulid %s SuccessFul\033[0m" % self.density_name[Chose_ENV]
print "\033[32m--------------------Create TarFiles--------------------\033[0m"
self.Files_Handle()
break
elif self.density_name[Chose_ENV] == 'demo':
os.chdir(self.SVN_Checked_Directory)
bulid_command = "%s clean install -Pcarrefour -DskipTests" % self.bulid_home
subprocess.call(bulid_command, shell=True)
if os.path.isfile(bulided_File_Path_F):
print "\033[32mBulid %s SuccessFul\033[0m" % self.density_name[Chose_ENV]
print "\033[32m--------------------Create TarFiles--------------------\033[0m"
self.Files_Handle()
break
elif self.density_name[Chose_ENV] == 'ptest':
os.chdir(self.SVN_Checked_Directory)
bulid_command = "%s clean install -PcarrefourPtest -DskipTests" % self.bulid_home
subprocess.call(bulid_command, shell=True)
if os.path.isfile(bulided_File_Path_F):
print "\033[32mBulid %s SuccessFul\033[0m" % self.density_name[Chose_ENV]
print "\033[32m--------------------Create TarFiles--------------------\033[0m"
self.Files_Handle()
break
except IndexError:
print "\033[31mSelect error\033[0m"
except KeyboardInterrupt:
print "\033[32m Quit\033[0m"
# select----Maven--->END def Files_Handle(self):
# 生成文件处理
# 文件压缩----tar
Tmp_density_dir = "/software/%s%s-%s" % (env, SVN_NUMBER, self.date_time)
os.makedirs(Tmp_density_dir)
source_fiels = ["%s/%s" % (self.Project_Directory_F, self.Project_Directory_F_Name),
"%s/%s" % (self.Project_Directory_B, self.Project_Directory_B_Name)]
for i in range(2):
shutil.move(source_fiels[i], Tmp_density_dir)
# 创建压缩包
os.chdir("/software")
tarfile_name = "%s.tar.gz" % Tmp_density_dir.split('/')[2]
tar = tarfile.open(tarfile_name, "w:gz")
tar.add(Tmp_density_dir.split('/')[2])
tar.close()
# 创建压缩包---end
if os.path.exists(tarfile_name):
print "\033[32m----------Delete Temporary Files%s----------\033[0m" % datetime.datetime.now().strftime(
'%Y-%m-%d %H:%M:%S %f')
shutil.rmtree(Tmp_density_dir)
shutil.move(tarfile_name, self.Upload_Directory)
Upload_Files_Name = "%s%s" % (self.Upload_Directory, tarfile_name)
print "\033[32mSuccessful Download address:URL/%s\033[0m" % tarfile_name
else:
print "\033[31m----------Create archive Is Failed%s----------\033[0m" % datetime.datetime.now().strftime(
'%Y-%m-%d %H:%M:%S %f')
# 删除临时文件
print "\033[32m---------Remove the compiled file%s----------\033[0m" % datetime.datetime.now().strftime(
'%Y-%m-%d %H:%M:%S %f')
if os.path.exists(Upload_Files_Name):
os.chdir("/software")
find_tmp = "find %s -name target" % self.SVN_Checked_Directory
porc = subprocess.Popen(find_tmp, shell=True, stdout=subprocess.PIPE)
export, err = porc.communicate()
out_files = open("path_list.txt", "w")
out_files.write(export)
out_files.close()
fileHandle = open('path_list.txt')
for line in fileHandle.readlines():
print "\033[31mRemove Target\033[0m", line
shutil.rmtree(line.strip('\n'))
fileHandle.close()
os.remove("path_list.txt")
# 删除文件----end def usage(self):
script_name = "packages.py"
print "\033[31m*****************************************\033[0m"
print "\033[31m|------------Packages Useage------------|\033[0m"
print "\033[32m|------------./%s--------------|\033[0m" % script_name
print "\033[32m|------------<path>/%s---------|\033[0m" % script_name
print "\033[32m|----------脚本执行过程2部人工干预------|\033[0m"
print "\033[32m|----------1.收到输入 SVN 版本号--------|\033[0m"
print "\033[32m|----------2.选择需要打包的环境---------|\033[0m"
print "\033[32m|----------3.复制输出下载链接进行下载---|\033[0m"
print "\033[31m******************************************\033[0m" if __name__ == '__main__':
Run_packages = Packages()
Run_packages.usage()
Run_packages.Subervison_Check()
Run_packages.Bulid()

Python package project的更多相关文章

  1. graphterm 0.40.1 : Python Package Index

    graphterm 0.40.1 : Python Package Index graphterm 0.40.1 Downloads ↓ A Graphical Terminal Interface ...

  2. How to using PyPI publish a Python package

    How to using PyPI publish a Python package PyPI & Python package https://pypi.org/ main make a f ...

  3. 使用NuGet Package Project快速制作NuGet包

    今天在visual studio gallery发现了一个插件NuGet Package Project,通过它可以在Visual Studio中建立Nuget Package工程,直接生成Nuget ...

  4. Ghost.py 0.1b3 : Python Package Index

    Ghost.py 0.1b3 : Python Package Index Ghost.py 0.1b3 Download Ghost.py-0.1b3.tar.gz Webkit based web ...

  5. pyrailgun 0.24 : Python Package Index

    pyrailgun 0.24 : Python Package Index pyrailgun 0.24 Download pyrailgun-0.24.zip Fast Crawler For Py ...

  6. qrcode 4.0.4 : Python Package Index

    qrcode 4.0.4 : Python Package Index qrcode 4.0.4 Download qrcode-4.0.4.tar.gz QR Code image generato ...

  7. bottle-session 0.3 : Python Package Index

    bottle-session 0.3 : Python Package Index bottle-session 0.3

  8. bottle-session 0.2 : Python Package Index

    bottle-session 0.2 : Python Package Index bottle-session 0.2 Download bottle-session-0.2.tar.gz Redi ...

  9. django-cookieless 0.7 : Python Package Index

    django-cookieless 0.7 : Python Package Index django-cookieless 0.7 Download django-cookieless-0.7.ta ...

随机推荐

  1. Kubernetes 两步验证 - 使用 Serverless 实现动态准入控制

    作者:CODING - 王炜 1. 背景 如果对 Kubernetes 集群安全特别关注,那么我们可能想要实现这些需求: 如何实现 Kubernetes 集群的两步验证,除了集群凭据,还需要提供一次性 ...

  2. 【科普】Scrum——从橄榄球争球到敏捷开发

    对敏捷开发Scrum稍有了解的都知道Scrum来源于橄榄球,但你知道为何要以这项球类运动的术语来命名这个敏捷开发方法论吗? Scrum与橄榄球对应关系 Scrum 一词源于英式橄榄球运动,是指双方球员 ...

  3. pycham中报:ModuleNotFoundError: No module named 'pymysql'

    参考https://www.cnblogs.com/wupeiqi/articles/5713330.html https://pypi.python.org/pypi # D:\Program Fi ...

  4. SpringBoot集成Spring Security

    1.Spring Security介绍 Spring security,是一个强大的和高度可定制的身份验证和访问控制框架.它是确保基于Spring的应用程序的标准 --来自官方参考手册 Spring ...

  5. 微信h5页面下拉露出网页来源的解决办法

    微信h5页面下拉露出网页来源的解决办法:将document的touchmove事件禁止掉 //禁止页面拖动 document.addEventListener('touchmove', functio ...

  6. 洛谷 P4910 帕秋莉的手环

    题意 多组数据,给出一个环,要求不能有连续的\(1\),求出满足条件的方案数 \(1\le T \le 10, 1\le n \le 10^{18}\) 思路 20pts 暴力枚举(不会写 60pts ...

  7. 线性动归之Wooden Sticks

    题面:现在有n(n<5000)个木头,每个木头都有长度l和重量w(l<10000,w<10000),现在你要对木头进行加工: 1.第一根木头需要先花费1min: 2.加工完第i跟木头 ...

  8. 通过手写服务器的方式,立体学习Http

    前言 Http我们都已经耳熟能详了,而关于Http学习的文章网上有很多,各个知识点的讲解也可说是深入浅出.然而,学习过后,我们对Http还是一知半解.问题出在了哪? Http是一个客户机与服务器之间的 ...

  9. day04 python入门(变量,基本数据类型)

    python入门学习 来自egon的学习套路 在每次遇到一个新事物的时候,要学三步: xxx是什么? 为什么要有xxx? ​ 大前提:python中所有出现的语法都是为了让计算机能够具有人的某一个功能 ...

  10. CTFHub_技能树_文件上传

    文件上传 无限制 直接上传一句话后门,使用蚁剑连接: 获得flag: 前端验证 尝试直接上传后门,发现被拦截,经过判断为Javascript前端验证: 这里可以使用Firefox浏览器插件禁用页面js ...