脚本功能
使用该脚本完成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()
本文出自 “吾在庐山” 博客,请务必保留此出处http://147546.blog.51cto.com/137546/1858108
原文地址:http://147546.blog.51cto.com/137546/1858108