SOA自动部署脚本(发布、更新、回滚)
脚本功能使用该脚本完成SOA工程的全量更新、增量更新、全量回滚等操作。自动部署流程 3. 脚本代码#!/usr/bin/python#coding=utf-8importsys,os,re,time,commands,loggingwork_dir='/data/company/soa'package_dir='/data/package/soa'updat...
·
-
脚本功能
使用该脚本完成SOA工程的全量更新、增量更新、全量回滚等操作。
-
自动部署流程
3. 脚本代码
#!/usr/bin/python
#coding=utf-8
import sys,os,re,time,commands,logging
work_dir='/data/company/soa'
package_dir='/data/package/soa'
update_file_path='/data/update/'
check_dir=os.path.exists(work_dir)
update_dir=os.path.exists(update_file_path)
data=os.listdir(update_file_path)
def Total_update():
flag=0
num=0
while num <3:
filename=raw_input('\033[1;31;40m请输入需要更新的完整包名:\033[0m')
os.chdir(package_dir)
result=os.path.lexists(filename)
if result == 1:
flag+=1
break
else:
num+=1
print '\033[1;31;40m您输入的包名不存在,请重新输入!\033[0m'
a=re.findall(r'^-soa-\d{14}.war$',filename)
filename_str=str(a).lstrip('[\'').rstrip('\']')
if len(filename_str) != 0:
flag+=1
else:
sys.exit()
if flag == 2:
time_tag=time.strftime("%Y%m%d%H%M%S", time.localtime())
release_dir=work_dir + '_' + time_tag
os.mkdir(release_dir)
os.system('rm -rf %s' %work_dir)
os.system('unzip %s -d %s' %(filename,release_dir))
os.system('ln -s %s %s' %(release_dir,work_dir))
info='软件包已成功更新至:' + release_dir
log_text(info)
print '\033[1;31;40m %s \033[0m' %info
def log_text(info):
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(message)s',
datefmt='%d %b %Y %H:%M:%S',
filename='/data/logs/update_soa.log',
filemode='a')
logging.debug(info)
def Incrementally_udate():
if update_dir != 1:
print '\033[1;31;40m创建更新文件存储目录!\033[0m'
os.system('mkdir -p %s' %update_file_path)
sys.exit()
if check_dir == 1:
os.chdir(work_dir)
find_command='find . -name "%s" ' %update_file
aresult=commands.getoutput(find_command)
if len(aresult) != 0:
file_path=aresult.rstrip(update_file)
os.chdir(file_path)
time_tag=time.strftime("%Y%m%d%H%M%S", time.localtime())
bak_result=commands.getstatusoutput('mv %s %s.%s' %(update_file,update_file,time_tag))
if bak_result[0] == 0:
update_file_abs_path=update_file_path + update_file
update_result=commands.getstatusoutput('mv -i %s %s' %(update_file_abs_path,update_file))
if update_result[0] == 0:
result=os.listdir(update_file_path)
info='更新' + work_dir + aresult.lstrip('\.') + '成功'
log_text(info)
print '\033[1;31;40m %s \033[0m' %info
else:
print '\033[1;31;40m工程目录中无此文件!\033[0m'
sys.exit()
else:
print '\033[1;31;40m工程目录不存在!\033[0m'
sys.exit()
def rollback():
def find_soa(i):
a=re.findall(r'soa_\d{14}$',i)
return a
os.chdir('/data/company')
soa_list=os.listdir('/data/company')
result=filter(find_soa,soa_list)
sort_list=[]
for t in result:
sort_list.append(t.split('soa_')[1])
sort_list.sort()
back_ver='soa_' + sort_list[-2]
last_ver='soa_' + sort_list[-1]
os.system('rm -rf /data/company/%s' %last_ver)
os.system('rm -rf /data/company/soa')
os.system('ln -s %s /data/company/soa' %back_ver)
info='代码回滚至:' + back_ver
log_text(info)
print '\033[1;31;40m %s \033[0m' %info
if __name__ == '__main__':
while True:
print '\033[1;31;40m'
print '''
********* SOA 程序更新 *********
1.全量更新
2.增量更新
3.代码回滚
4.退出程序
*********************************
'''
print '\033[0m'
choice=raw_input('\033[1;31;40m请输入您的选择:\033[0m')
if choice == '1':
print '\033[1;31;40m'
print '您选择的项目是全量更新'
print '\033[0m'
Total_update()
if choice == '2':
print '\033[1;31;40m'
print '您选择的项目是增量更新'
print '\033[0m'
if len(data) == 0:
print '\033[1;31;40m无更新文件,请检查!\033[0m'
backup_tag=time.strftime("%Y%m%d%H%M%S", time.localtime()) + 'zengliangbeifen'
bresult=commands.getoutput('ls -l %s' %work_dir)
real_dir=str(bresult.split('->')[-1])
os.chdir('/data/company')
os.system ('cp -r %s %s_%s' %(real_dir,real_dir,backup_tag))
for update_file in data:
Incrementally_udate()
if choice == '3':
print '\033[1;31;40m'
print '您选择的项目是代码回滚'
print '\033[0m'
rollback()
if choice == '4':
print '\033[1;31;40m'
print '您选择的项目是退出程序'
print '\033[0m'
sys.exit()
转载于:https://blog.51cto.com/147546/1858108
更多推荐
所有评论(0)