第一篇博文

直接开门见山的说了。

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

一直在想有什么办法可以解决这种,因为以前在微软的一个牛人同事做过一个脚本实现自动化部署,正巧最近在学习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写的自动化部署脚本的更多相关文章

  1. centos7.2环境nginx+mysql+php-fpm+svn配置walle自动化部署系统详解

    centos7.2环境nginx+mysql+php-fpm+svn配置walle自动化部署系统详解 操作系统:centos 7.2 x86_64 安装walle系统服务端 1.以下安装,均在宿主机( ...

  2. 《转载》Jenkins持续集成-自动化部署脚本的实现《python》

    本文转载自慕课网 读者须知:1.本手记本着记续接前面的两张手记内容整理2.本手记针对tomcat部署测试环境实现 最近工作比较繁忙,导致这章一直拖延,没有太抽出时间来总结.要实现Jenkins端的持续 ...

  3. Jenkins+SVN+Maven+shell 自动化部署实践

      JAVA环境中利用Jenkins+svn+maven进行自动化部署实践   一. 前言2 1.介绍jenkins2 1.本地项目打包2 2.通过secureCRT工具,手动传输到服务器2 3.然后 ...

  4. Jenkins持续集成-自动化部署脚本的实现

    要实现Jenkins端的持续集成,其实在CI服务配置端很容易,难点呢?就是如何实现自动化的部署.我的脚本设计就是为了解决以下难题: 难点一.如何使得自动化部署脚本更通用 我用的脚本,依赖依赖一个配置文 ...

  5. 自动化部署脚本--linux执行sh脚本

    自动化部署脚本文件目录: 运行主程序:./install.sh #!/bin/bash SCRIPTPATH=$(cd "$(dirname "$0")"; p ...

  6. 设置ssh免密码登录脚本(hadoop自动化部署脚本一)

    设置ssh免密码登录脚本(hadoop自动化部署脚本一) 设置ssh免密码登录脚本(飞谷云大数据自动化部署脚本一) 1.#!/bin/sh2.#important note:this script i ...

  7. MySQL5.7多实例自动化部署脚本

    一.安装说明 ------------------------------------------------------ mysql5.7.10_onekey_install.sh自动化部署脚本支持 ...

  8. python os库的使用方法 + 自动化安装第三方库脚本

    一.os库基本介绍 os库提供通用的.基本的操作系统交互功能,包括windows.Mac os.linux os库是python标准库,包含几百个函数 常用路径操作.进程管理.环境参数等几类 路径操作 ...

  9. [MySQL-MM] 生产环境自动恢复MM中一台M2库的过程,分享从零开始写的自动化重建脚本以及思路 (转)

    必须是MM架构,而且一台主库M1是完好无损的,一台主库M2可以根据M1主库来进行重建:如果MS架构,自己可以稍微做一下脚本修改动作,也能使用,架构如下图所示: 3  总体思路,建立主脚本a_build ...

随机推荐

  1. 我的操作系统复习——I/O控制和系统调用

    上篇博客介绍了存储器管理的相关知识——我的操作系统复习——存储器管理,本篇讲设备管理中的I/O控制方式和操作系统中的系统调用. 一.I/O控制方式 I/O就是输入输出,I/O设备指的是输入输出设备和存 ...

  2. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  3. [LeetCode] Number of Segments in a String 字符串中的分段数量

    Count the number of segments in a string, where a segment is defined to be a contiguous sequence of ...

  4. KD-tree(2维)

    用于动态插入以及求某点的最近点的距离(BZOJ2648,BZOJ2716) #include <cstdio> #include <cmath> #include <al ...

  5. JavaScript模板引擎artTemplate.js——是否编码输出html字符

    template.config(name, value)方法用于更改引擎的默认配置. 其中字段escape,类型为boolean,默认为true. 首先,我们不修改配置信息输出一段带有html标签的字 ...

  6. [转]extjs grid的Ext.grid.CheckboxSelectionModel默认选中解决方法

    原文地址:http://379548695.iteye.com/blog/1167234 grid的复选框定义如下:   var sm = new Ext.grid.CheckboxSelection ...

  7. com.panie 项目开发随笔_功能任务设计(2016.12.28)

    (一) 第一个菜单 做什么好呢? 1)上次 在研究的功能 是 爬虫,需要将定时爬虫的任务加进来 2)博客的页面,也需要重新布局出来 3)需要做一个,添加博客的页面 (二) 那就先做博客管理吧! 先添加 ...

  8. neo4j-备份、恢复

    neo4j备份命令(本例linux) neo4j-backup 命令使用: ./neo4j-backup -full -from single://[machine IP] -to ~/backup- ...

  9. js判断浏览器类型

    使用navigator.userAgent和来判断 PC端: <script type="text/javascript">var ua=navigator.userA ...

  10. ios小数向上、下取整,计算结果向上、下取整

    [摘要:小数背上与整,指小数局部间接进1 x=3.14, ceilf (x)=4 小数背下与整,指间接往失落小数局部 x=3.14,floor(x)=3 盘算效果背上与整 A被除数,B除数 ,(AB- ...