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         pass
104
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         pass
115 #对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         pass
131
132 #停止tomcat
133 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 #启动tomcat
140 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         pass
150
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}‘+"‘"+‘|xargs‘
156     (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 ERROR‘
159                 logging.info(svn_hao+‘ version number  is ERROR‘)
160                 sys.exit(1)
161         if ( output == ""):
162                 print svn_hao+‘ version number  is ERROR‘
163                 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_version
176         ip = options.ipaddress
177         svn_name = options.svn_name
178
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)
时间: 2024-10-10 13:51:53

saltstack+svn+python发布的相关文章

SaltStack与Python配合实现系统用户自动化管理

背景需求: 随意业务的发展,服务器数据也是越来越多,开发人员,运维人员也是越来越多.这时候如果有大量的人需要登录到服务器的话,那么我们就很有必要对用户进行管理.传统的方式是登录到每台服务器创建一个用户,工作重复性太大,如果有 1000台怎么办?甚至有的公司用户都不创建直接让所有人以root登录,这样更危险!!!,那么聪明一点的运维人员会写个创建用户的脚本来实现半自动化的创建用户.这些方法都不适合管理大批量的机器,接下来给大家带来其于SaltStack和Python脚本实现的自动化用户管理. 实现

python发布与共享

1.新建.py文件,并将代码拷贝到.py文件中 def listItems(items): for item in items : if isinstance(item,list): listItems(item) else: print(item) 2.新建文件夹listItem,将listItem.py文件拷贝到文件夹中 3.在文件夹listItem中新建一个名为“setup.py”的文件,并添加如下代码 #从python发布工具导入"setup"函数 from distutils

变色龙安装程序 Chameleon Install 2.2 svn 2281发布

Chameleon Install 2.2 svn 2281发布" name="image_operate_24251386496298186" alt="变色龙安装程序 Chameleon Install 2.2 svn 2281发布" src="http://s8.sinaimg.cn/mw690/001zBYBJgy6EPMI97T1a7&690" width="690" height="51

python发布及调用基于SOAP的webservice

现如今面向服务(SOA)的架构设计已经成为主流,把公用的服务打包成一个个webservice供各方调用是一种非常常用的做法,而应用最广泛的则是基于SOAP协议和wsdl的webservice.本文讲解python环境下如何发布及调用一个基于SOAP的webservice,基于soaplib(发布)和suds(调用). OS:ubuntu 14.04  python:2.7.6 服务端: 1.安装: 服务端要使用的工具包是soaplib,遗憾的是现在也停止维护了,不过好在还能用,下载地址在http

ansible+nginx+apache+svn自动化发布

ansible+nginx+apache+svn自动化发布(隐藏真实ip以及路径) 一.ansible根据以下网址进行安装http://blog.51cto.com/8999a/1965139 二.nginx+apache+svn安装 rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpmyum install httpd subversion mod_

基于saltstack svn写的一个发布系统

之前写了一个代码发布系统,功能,体验还有待完善,先放截图,想获得源码的,私聊我 1.登录页 2.分组管理页 3.添加项目页 4.项目列表和项目编辑页 5.项目发布回滚页

saltstack+git+rsync发布代码

一度git版本利用tag上线 ####################git部分############### 脚本 #!/bin/bash #630manage的pull代码方法 git  --git-dir=630manage/.git--work-tree=630manage clean -dfx git  --git-dir=630manage/.git--work-tree=manage reset --hard git  --git-dir=630manage/.git checko

Python发布

把新建的以下模块(nester.py)共享,需要准备一个发布. def print_lol(the_list): """The file name is nester.py. print each_item for list""" for each_item in the_list: if isinstance(each_item,list): print_lol(each_item) else: print each_item 新建一个文件夹n

SaltStack 与 Python 程序的结合

SaltStack 库中的 Modules: 在 SaltStack 中,每个子系统插件(plug-in)都是一个 Python Module.因此,SaltStack 库中的 Module 可以看作是一组 functions(例如:aka 命令):可以看作是一个应用(例如:mysql.docker):可以看作是一个系统组件(例如:disk.file):还可以看作是一个外部系统(gitfs). 使用 SaltStack 库中的 Modules 需要注意以下几点: (1).所有的模块都在 salt