python+paramiko库+svn写的自动化部署脚本
第一篇博文
直接开门见山的说了。
这是件什么事?:每次部署都是复制本地的文件粘贴到服务器端,因为路径复杂,所以费时且手工容易出漏洞。
一直在想有什么办法可以解决这种,因为以前在微软的一个牛人同事做过一个脚本实现自动化部署,正巧最近在学习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
__author__ = 'Administrator'
# coding:utf8
import os
import re url = "svn://192.168.30.111/ZXJY_ALL"
localPath = 'E:\quanli360\项目'
vision_num = raw_input('type a vision num: ') # 需要运行SVN的命令
svn_command = 'svn log ' + localPath + '\p2p_standard_2.0_quanli -r ' + vision_num + ' -v'
#转码让system执行得时候可以适应中文
svn_command = svn_command.decode("utf-8").encode("gbk")
print 'run shell is===', svn_command
#执行svn_command
a = os.popen(svn_command).read() print a
#正则取出版本号得更新文件路径
print "取出文件路径:"
def regPath(strPath):
reg = 'p2p_standard_2.0_quanli\\s*\\w*\\W*\\S*'
regCom = re.compile(reg)
pathList = re.findall(regCom, strPath)
#print pathList
return pathList res = regPath(a)
print '=='*60 def regPathC(strPath):
reg = '\\com\\\\s*\\w*\\W*\\S*'
regCom = re.compile(reg)
pathList = re.findall(regCom, strPath)
#print pathList
return pathList def regPathS(strPath):
reg = '\\site\\\\s*\\w*\\W*\\S*'
regCom = re.compile(reg)
pathList = re.findall(regCom, strPath)
#print pathList
return pathList #sftp命令上传至服务器,<目前只能先删除待更新文件,再上传文件过去>
import paramiko username = 'work'
password = 'Ex42tko4{G4NT@{^'
hostname = 'XXX.XXX.XXX.XXX'
port = 2022 def deployServer(locath, objPath):
try:
t = paramiko.Transport((hostname, port))
t.connect(username=username, password=password)
sftp = paramiko.SFTPClient.from_transport(t)
#rename
sftp.remove(objPath)
print 'Now start'
sftp.put(locath, objPath)
print 'good'
print '=='*60
t.close();
except Exception, e:
import traceback
traceback.print_exc()
try:
t.close()
except:
pass # 如果一个版本号下多个文件挨个取出并补全路径,执行部署
for x in range(len(res)):
realLocPath = localPath + '\\' + res[x]
realLocPath = realLocPath.replace("/", "\\")
print (realLocPath)
print '=='*60
if realLocPath.__contains__("\\com\\"):
cutStr = regPathC(realLocPath)
cutStr = ''.join(cutStr)
#匹配本地编译后的文件
cutStr = cutStr.replace(".java", ".class")
realLocPath = "E:\\apache-tomcat-6.0.37\\webapps\\archer\\WEB-INF\\classes\\" + cutStr
cutStrL = cutStr.replace("\\", "/")
objectPath = "/home/work/tomcat_instances/quanli360.com-instance-3/webapps/archer/WEB-INF/classes/" + cutStrL
print 'Source:-->',realLocPath
print 'Server:-->',objectPath
deployServer(realLocPath,objectPath)
elif realLocPath.__contains__("\\site\\"):
print 'start site'
cutStr = regPathS(realLocPath)
print cutStr
cutStr = ''.join(cutStr)
realLocPath = 'E:\\apache-tomcat-6.0.37\\webapps\\archer\\site' + cutStr
objectPath = '/home/work/tomcat_instances/quanli360.com-instance-3/webapps/archer/' + cutStr
cutStrL = cutStr.replace("\\", "/")
objectPath = '' + cutStrL
print cutStr,realLocPath, objectPath
# deployServer(realLocPath,objectPath)
else:
print ("no contains")
# deployLoc(realLocPath) print '=='*60
python+paramiko库+svn写的自动化部署脚本的更多相关文章
- centos7.2环境nginx+mysql+php-fpm+svn配置walle自动化部署系统详解
centos7.2环境nginx+mysql+php-fpm+svn配置walle自动化部署系统详解 操作系统:centos 7.2 x86_64 安装walle系统服务端 1.以下安装,均在宿主机( ...
- 《转载》Jenkins持续集成-自动化部署脚本的实现《python》
本文转载自慕课网 读者须知:1.本手记本着记续接前面的两张手记内容整理2.本手记针对tomcat部署测试环境实现 最近工作比较繁忙,导致这章一直拖延,没有太抽出时间来总结.要实现Jenkins端的持续 ...
- Jenkins+SVN+Maven+shell 自动化部署实践
JAVA环境中利用Jenkins+svn+maven进行自动化部署实践 一. 前言2 1.介绍jenkins2 1.本地项目打包2 2.通过secureCRT工具,手动传输到服务器2 3.然后 ...
- Jenkins持续集成-自动化部署脚本的实现
要实现Jenkins端的持续集成,其实在CI服务配置端很容易,难点呢?就是如何实现自动化的部署.我的脚本设计就是为了解决以下难题: 难点一.如何使得自动化部署脚本更通用 我用的脚本,依赖依赖一个配置文 ...
- 自动化部署脚本--linux执行sh脚本
自动化部署脚本文件目录: 运行主程序:./install.sh #!/bin/bash SCRIPTPATH=$(cd "$(dirname "$0")"; p ...
- 设置ssh免密码登录脚本(hadoop自动化部署脚本一)
设置ssh免密码登录脚本(hadoop自动化部署脚本一) 设置ssh免密码登录脚本(飞谷云大数据自动化部署脚本一) 1.#!/bin/sh2.#important note:this script i ...
- MySQL5.7多实例自动化部署脚本
一.安装说明 ------------------------------------------------------ mysql5.7.10_onekey_install.sh自动化部署脚本支持 ...
- python os库的使用方法 + 自动化安装第三方库脚本
一.os库基本介绍 os库提供通用的.基本的操作系统交互功能,包括windows.Mac os.linux os库是python标准库,包含几百个函数 常用路径操作.进程管理.环境参数等几类 路径操作 ...
- [MySQL-MM] 生产环境自动恢复MM中一台M2库的过程,分享从零开始写的自动化重建脚本以及思路 (转)
必须是MM架构,而且一台主库M1是完好无损的,一台主库M2可以根据M1主库来进行重建:如果MS架构,自己可以稍微做一下脚本修改动作,也能使用,架构如下图所示: 3 总体思路,建立主脚本a_build ...
随机推荐
- 如何给SVG填充和描边应用线性渐变
给SVG元素应用填充和描边有三种方法(戳这里学习SVG填充和描边的相关内容).你可以使用纯色.图案或渐变.前面两种方法我们之前已经讲过了,现在我们来讨论第三种方法——渐变. SVG提供了两种渐变——线 ...
- Android----消息弹出框
关于Android的知识,自从工作了就没有什么时间去总结学习过的知识,我个人比较喜欢学习后总结,今天就写一下关于android中消息弹出框的几种方式的简单示例,按照自己的思路写了一段,希望对和我一样在 ...
- Centos 7 使用jenkins 打包android项目
1.配置java环境 在sun官网下载,解压后放入/usr/java下,并配置环境变量如 vi /etc/profile 在最底部加入如下配置(注:添加环境变量,都是在文件最底部添加) J ...
- MySQL基础
数据库操作 ---终端使用数据库 mysql -u root -p 之后回车键 输入密码 ---显示所有数据库: show databases; ---默认数据库: mysql - 用户权限相关数据 ...
- Sass学习笔记
语法 @each $var in <list>//循环就是去遍历一个列表,然后从列表中取出对应的值 @while $types > 0 //循环直到函数不成立 SASS函数 To-u ...
- xv6的课本翻译之——附录B 系统启动器
Appendix B 附录 B Figure B-1 The relationship between logical, linear, and physical addresses. 图B-1:逻辑 ...
- JS使用getComputedStyle()方法获取CSS属性值
在对网页进行调试的过程中,经常会用到js来获取元素的CSS样式,方法有很多很多,现在仅把我经常用的方法总结如下: 1. obj.style:这个方法只能JS只能获取写在html标签中的写在style属 ...
- 批量从jar包中提取pom.xml
将非maven项目转换为maven项目,首要第一步就是提取原工程依赖jar里的pom.xml,拼成<dependency>节点 import java.io.File; import ja ...
- 净捡软柿子捏--jQuery 遍历方法
---------------------------------------------add()------------------------------------------ jquery. ...
- 说说APP接口中的版本控制
引言 接口是APP的重要组成部分,数据是APP的核心,接口是连接APP和数据的纽带. 一般情况下,APP中会有大量的接口,再加上版本的变化,接口的升级,一个接口 可能会衍生出很多个稍有差异的接口,这个 ...