码迷,mamicode.com
首页 > 编程语言 > 详细

python+paramiko库+svn写的自动化部署脚本

时间:2016-01-06 16:04:55      阅读:313      评论:0      收藏:0      [点我收藏+]

标签:

 

第一篇博文

直接开门见山的说了。

这是件什么事?:每次部署都是复制本地的文件粘贴到服务器端,因为路径复杂,所以费时且手工容易出漏洞。

一直在想有什么办法可以解决这种,因为以前在微软的一个牛人同事做过一个脚本实现自动化部署,正巧最近在学习python,就用python写一个自动化得脚本吧。

1.首先是环境:SVN的版本控制,windows的本地,linux服务器。

2.思路:应用python,代入cmd脚本,加上强大的python库来做这件事。

3.再详细的思路:

        第一步:利用SVN的cmd下得脚本,获取到对应版本修订号下修改log。用正则表达式取出修改后的文件名及路径

        第二步:因为是java程序,这样取出来的是xx.java文件,但需要部署上去的是编译后的xx.class文件,所以需要取到本地编译过后文件。

        第三步:安装python paramiko库.

        第四步:just build and run it

  1 __author__ = Administrator
  2 # coding:utf8
  3 import os
  4 import re
  5 
  6 url = "svn://192.168.30.111/ZXJY_ALL"
  7 localPath = E:\quanli360\项目
  8 vision_num = raw_input(type a vision num: )
  9 
 10 # 需要运行SVN的命令
 11 svn_command = svn log  + localPath + \p2p_standard_2.0_quanli -r  + vision_num +  -v
 12 #转码让system执行得时候可以适应中文
 13 svn_command = svn_command.decode("utf-8").encode("gbk")
 14 print run shell is===, svn_command
 15 #执行svn_command
 16 a = os.popen(svn_command).read()
 17 
 18 print a
 19 #正则取出版本号得更新文件路径
 20 print "取出文件路径:"
 21 def regPath(strPath):
 22     reg = p2p_standard_2.0_quanli\\s*\\w*\\W*\\S*
 23     regCom = re.compile(reg)
 24     pathList = re.findall(regCom, strPath)
 25     #print pathList
 26     return pathList
 27 
 28 res = regPath(a)
 29 print ==*60
 30 
 31 def regPathC(strPath):
 32     reg = \\com\\\\s*\\w*\\W*\\S*
 33     regCom = re.compile(reg)
 34     pathList = re.findall(regCom, strPath)
 35     #print pathList
 36     return pathList
 37 
 38 def regPathS(strPath):
 39     reg = \\site\\\\s*\\w*\\W*\\S*
 40     regCom = re.compile(reg)
 41     pathList = re.findall(regCom, strPath)
 42     #print pathList
 43     return pathList
 44 
 45 #sftp命令上传至服务器,<目前只能先删除待更新文件,再上传文件过去>
 46 import paramiko
 47 
 48 username = work
 49 password = Ex42tko4{G4NT@{^
 50 hostname = 118.244.204.239
 51 port = 2022
 52 
 53 
 54 def deployServer(locath, objPath):
 55     try:
 56         t = paramiko.Transport((hostname, port))
 57         t.connect(username=username, password=password)
 58         sftp = paramiko.SFTPClient.from_transport(t)
 59         #rename
 60         sftp.remove(objPath)
 61         print Now start
 62         sftp.put(locath, objPath)
 63         print good
 64         print ==*60
 65         t.close();
 66     except Exception, e:
 67         import traceback
 68         traceback.print_exc()
 69         try:
 70             t.close()
 71         except:
 72             pass
 73 
 74 # 如果一个版本号下多个文件挨个取出并补全路径,执行部署
 75 for x in range(len(res)):
 76     realLocPath = localPath + \\ + res[x]
 77     realLocPath = realLocPath.replace("/", "\\")
 78     print (realLocPath)
 79     print ==*60
 80     if realLocPath.__contains__("\\com\\"):
 81         cutStr = regPathC(realLocPath)
 82         cutStr = ‘‘.join(cutStr)
 83         #匹配本地编译后的文件
 84         cutStr = cutStr.replace(".java", ".class")
 85         realLocPath = "E:\\apache-tomcat-6.0.37\\webapps\\archer\\WEB-INF\\classes\\" + cutStr
 86         cutStrL = cutStr.replace("\\", "/")
 87         objectPath = "/home/work/tomcat_instances/quanli360.com-instance-3/webapps/archer/WEB-INF/classes/" + cutStrL
 88         print Source:-->,realLocPath
 89         print Server:-->,objectPath
 90         deployServer(realLocPath,objectPath)
 91     elif realLocPath.__contains__("\\site\\"):
 92         print start site
 93         cutStr = regPathS(realLocPath)
 94         print cutStr
 95         cutStr = ‘‘.join(cutStr)
 96         realLocPath = E:\\apache-tomcat-6.0.37\\webapps\\archer\\site + cutStr
 97         objectPath = /home/work/tomcat_instances/quanli360.com-instance-3/webapps/archer/ + cutStr
 98         cutStrL = cutStr.replace("\\", "/")
 99         objectPath = ‘‘ + cutStrL
100         print cutStr,realLocPath, objectPath
101         # deployServer(realLocPath,objectPath)
102     else:
103         print ("no contains")
104     # deployLoc(realLocPath)
105 
106 print ==*60

 

python+paramiko库+svn写的自动化部署脚本

标签:

原文地址:http://www.cnblogs.com/debude/p/5105590.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!