首页 > 代码库 > saltstack+svn+python发布

saltstack+svn+python发布

  1 #!/usr/bin/python  2 #-*- coding: utf-8 -*-  3 ###############################################  4 #                                             #   5 #         creator:    zenghui                 #  6 #         datetime:   20/12/2014              #  7 #                                             #   8 ###############################################  9  10 import commands,subprocess,os,sys,time,logging,shutil 11 from optparse import OptionParser 12 import config 13  14 #定义时间 15 day=time.strftime(%Y%m%d%H%M%S) 16 #定义日志文件 17 logging.basicConfig(level=logging.INFO, 18                 format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s, 19                 datefmt=%a, %d %b %Y %H:%M:%S, 20                 filename=upload.log, 21                 filemode=a) 22  23  24 #运行系统命令 25 def cmd_share(cmd): 26         (status,output)=commands.getstatusoutput(cmd) 27         if status == 0: 28                 print cmd+ is ok 29                 logging.info(cmd + " ---is OK!") 30                 #print output 31         else: 32                 print output 33                 print cmd + " is  NO" 34                 logging.info(cmd + " ---is NO!") 35                 sys.exit(1) 36  37 #1.获取svn版本信息并进行操作 38 def svn_file_list(svn_hao,svn_dir,ip,name): 39     svn_file=svn log -v  -r +svn_hao+ +svn_dir+|awk +""+{if ($1=="M" || $1=="A" || $1=="R") print $2}+""+|xargs 40     (status,output)=commands.getstatusoutput(svn_file) 41     file=output.split( ) 42     svn_cut_file=map(lambda x:/.join(x.split(/)[config.ipaddress[ip][svn_name][4]:]),file) 43     svn_cut_dir=set(map(lambda x:/.join(x.split(/)[config.ipaddress[ip][name][5]:-1]),file)) 44     rm_dir=rm -rf +config.ipaddress[ip][name][2]+*     45     try: 46         cmd_share(rm_dir) 47     except: 48         pass 49     #提取svn文件,并进行备份 50     for i in svn_cut_file: 51         if . in i: 52             svn_file_backup=salt +""+config.ipaddress[ip][ip]+""+ cmd.run +""+cp -rf +config.ipaddress[ip][name][1]+i+ +config.ipaddress[ip][name][1]+i+day+svnold.backup+"" 53             try: 54                 cmd_share(svn_file_backup) 55             except: 56                 pass 57     #提取svn目录,并进行创建 58     for dir in svn_cut_dir: 59         try: 60             local_dir=mkdir -p +config.ipaddress[ip][name][2]+dir 61             cmd_share(local_dir) 62         except: 63             pass 64     #将svn文件export到本地目录 65     filename_dir=[] 66     for file_list in file: 67         dir="/".join(file_list.split(/)[config.ipaddress[ip][name][5]:-1]) 68         filename=file_list.split(/)[-1].strip() 69         filename_dir.append(dir+/+filename) 70         svnfile="svn export %s %s" % (svn://192.168.11.28/repos1+file_list+@+svn_hao,config.ipaddress[ip][name][2]+dir+/+filename) 71         try: 72             cmd_share(svnfile) 73         except: 74             pass 75     #对export的目录进行上传 76     for cp_file in filename_dir: 77         #upload_file=‘salt "‘+config.ipaddress[ip][ip]+‘"‘+‘ cp.get_dir ‘+config.ipaddress[ip][name][3]+cp_file+‘ ‘+config.ipaddress[ip][name][1]+‘/‘.join(cp_file.split(‘/‘)[:-1]) 78         upload_file=salt "+config.ipaddress[ip][ip]+"+ cp.get_file +config.ipaddress[ip][name][3]+cp_file+ +config.ipaddress[ip][name][1]+cp_file 79         chown_file=salt "+config.ipaddress[ip][ip]+"+ cmd.run +"chown -R nginx.nginx +config.ipaddress[ip][name][1]+cp_file+" 80         try: 81             cmd_share(upload_file) 82             cmd_share(chown_file) 83         except: 84             pass 85  86 #2.获取svn版本将进行打包war 87 def War_ant(svn_hao,name,ip): 88     www_build_rt="sed -i ‘s/D:\/Program Files\/Java\/jre7\/lib\/rt.jar/\/opt\/jre1.7.0_67\/lib\/rt.jar/g‘"+ +config.ipaddress[ip][name][3]+version+/build.xml 89     www_build_apache="sed -i ‘s/D:\/apache-tomcat-7.0.52\/lib/\/opt\/apache-tomcat-7.0.53\/lib/g‘"+ +config.ipaddress[ip][name][3]+version+/build.xml 90     #www_build_apache2="sed -i ‘s/D:\/java\/apache-tomcat-7.0.52\/lib/\/opt\/apache-tomcat-7.0.53\/lib/g‘"+‘ ‘+config.ipaddress[ip][name][3]+version+‘/build.xml‘ 91     www_svn_ant="ant -f "+config.ipaddress[ip][name][3]+svn_hao+/build.xml 92     checkout=svn co -r +svn_hao+ +config.ipaddress[ip][name][0]+ +config.ipaddress[ip][name][3]+svn_hao 93     cp_war=cp -rf +config.ipaddress[ip][name][3]+svn_hao+/+config.ipaddress[ip][name][5]+ +config.ipaddress[ip][name][2] 94     try: 95         cmd_share(checkout) 96         if name == www_war: 97             cmd_share(www_build_rt) 98         cmd_share(www_build_apache) 99         #cmd_share(www_build_apache2)100         cmd_share(www_svn_ant)101         cmd_share(cp_war)102     except:103         pass104 105 #对线上war,项目目录打包备份106 def War_name_backup(name,ip):107     war_backup=salt "+config.ipaddress[ip][ip]+" cmd.run "cp -rf +config.ipaddress[ip][name][4]+config.ipaddress[ip][name][5]+ +config.ipaddress[ip][name][6]+config.ipaddress[ip][name][5]+day+"108     name_backup=salt "+config.ipaddress[ip][ip]+" cmd.script +config.tomcat_scripts+config.ipaddress[ip][name][7]109     try:110         cmd_share(war_backup)111         if name == www_war:    112             cmd_share(name_backup)113     except:114         pass115 #对war进行上传操作116 def War_upload(name,ip):117     name_rm=salt "+config.ipaddress[ip][ip]+" cmd.run "rm -rf +config.ipaddress[ip][name][4]+config.ipaddress[ip][name][10]+"118     war_upload=salt "+config.ipaddress[ip][ip]+"+ cp.get_file +config.ipaddress[ip][name][1]+config.ipaddress[ip][name][5]+ +config.ipaddress[ip][name][4]+config.ipaddress[ip][name][5]119     war_unzip=salt "+config.ipaddress[ip][ip]+"  cmd.run  "unzip -qo +config.ipaddress[ip][name][4]+config.ipaddress[ip][name][5]+ -d +config.ipaddress[ip][name][4]+config.ipaddress[ip][name][10]+"120     js_cp=salt "+config.ipaddress[ip][ip]+" cmd.run +"cp -rf +config.ipaddress[ip][name][4]+config.ipaddress[ip][name][10]+js +config.ipaddress[ip][name][11]+"121     css_cp=salt "+config.ipaddress[ip][ip]+" cmd.run +"cp -rf +config.ipaddress[ip][name][4]+config.ipaddress[ip][name][10]+css +config.ipaddress[ip][name][11]+"122     try:123         cmd_share(name_rm)124         cmd_share(war_upload)125         cmd_share(war_unzip)126         if name == www_war:127             cmd_share(js_cp)128             cmd_share(css_cp)129     except:130         pass131 132 #停止tomcat133 def Tomcat_stop(name,ip):134     #tomcat_shutdown=‘salt "‘+config.ipaddress[ip][ip]+‘" cmd.script ‘+config.ipaddress[ip][name][1]+config.ipaddress[ip][name][8]135     tomcat_shutdown=salt "+config.ipaddress[ip][ip]+" cmd.script +config.tomcat_scripts+config.ipaddress[ip][name][8]136     subprocess.Popen(tomcat_shutdown, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)137     print "tomcat shutdown done ---is ok"138 139 #启动tomcat140 def Tomcat_start(name,ip):141     #tomcat_start=‘salt "‘+config.ipaddress[ip][ip]+‘" cmd.script ‘+config.ipaddress[ip][name][1]+config.ipaddress[ip][name][9]142     tomcat_start=salt "+config.ipaddress[ip][ip]+" cmd.script +config.tomcat_scripts+config.ipaddress[ip][name][9]143     subprocess.Popen(tomcat_start, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)144     print "tomcat shutdown done ---is ok"145     chown_tomcat=salt "+config.ipaddress[ip][ip]+" cmd.run +"chown -R tomcat.tomcat +config.ipaddress[ip][name][4]+config.ipaddress[ip][name][10]+"146     try:147         cmd_share(chown_tomcat)148     except:149         pass150 151 152 153 #判断svn版本号存不存在154 def version_svn(svn_hao,svn_dir):155     svn_file=svn log -v  -r +svn_hao+ + svn_dir + |awk +""+{if ($1=="M" || $1=="A" || $1=="R") print $2}+""+|xargs156     (status,output)=commands.getstatusoutput(svn_file)157     if ("Unable to find repository location for" in output or "No such revision" in output):158                 print svn_hao+ version number  is ERROR159                 logging.info(svn_hao+ version number  is ERROR)160                 sys.exit(1)161         if ( output == ""):162                 print svn_hao+ version number  is ERROR163                 logging.info(svn_hao+ version number  is ERROR)164                 sys.exit(1)165 166 167 if __name__=="__main__":168         usage = "usage: %prog [options] arg :upload_service.py -r version -i ipaddress -n svn_name"169         parser = OptionParser(usage)170         parser.add_option("-r","--svn",dest="svn_version",help="input the svn version. 4686")171         parser.add_option("-i","--ip",dest="ipaddress",help="input the svn version. 192.168.11.45")172         parser.add_option("-n","--name",dest="svn_name",help="input the svn svn_name. test|real")173 174         (options, args) = parser.parse_args()175         version = options.svn_version176         ip = options.ipaddress177         svn_name = options.svn_name178 179         if (version is None or config.ipaddress is None or svn_name is None):180                 os.system(python upload_service.py -h)181                 sys.exit(1)182         elif ip in config.keys:183         #对需要更新war包的项目名做判断184         if svn_name != ‘war:185             version_svn(version,config.ipaddress[ip][svn_name][0])186             svn_file_list(version,config.ipaddress[ip][svn_name][0],config.ipaddress[ip][ip],svn_name)187         else:188             version_svn(version,config.ipaddress[ip][svn_name][0])189             War_ant(version,svn_name,ip)190             War_name_backup(svn_name,ip)191             Tomcat_stop(svn_name,ip)192             War_upload(svn_name,ip)193             Tomcat_start(svn_name,ip)

 

saltstack+svn+python发布