公司的部署程序太多,每次部署安装完后,还得从SVN上对比版本,手工做实在太麻烦。

比如下面的一个版本

思路:

将需要检查的部件及安装的位置、SVN相关信息写入配置文件,然后程序读取配置文件

配置文件内容如下:

[server1]
ipaddr=192.168.3.2
password=qqqqq
port=
dir=/home/gx/ ----##部件按装的位置
compent=sc,cag,ghomeAgent,IfTImg,Stream,TransDownload ---###服务器上安装的部件 [Server2]
ipaddr=192.168.14.31
password=qqqqq
port=
dir=/home/gx/
compent=bms,bussinessAgent [SVN]
svnserver=192.168.3.185
user=nenenen
password=xxxx
url=http://192.168.3.185/TM/VS/VSP/04_Build
~

因设计到公司内部的产品,代码屏蔽了一些东西:

#!/usr/bin/python
#coding:utf-8
import paramiko
import sys
import subprocess
import ConfigParser
import os,time
import re
import urllib2
from urlparse import urlparse
import unittest #从SVN获取组件及版本号
class snvparser(): aa={}
def __init__(self,url,server,user,passwd): auth_handler = urllib2.HTTPBasicAuthHandler()
auth_handler.add_password(realm='TM Repository',
uri=server,
user=user,
passwd=passwd)
self.opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(self.opener)
self.url=url #print self.url
a=self.opener.open(self.url)
data=a.read()
patten='href="(\w*?)/"'
self.compentlist=re.findall(patten,data)
#print self.compentlist
if 'mvp' in "".join(self.compentlist) or 'GXVCP' in ''.join(self.compentlist):
urldd = urlparse(self.url)
result=urldd.path.split('/')[-1]
self.compentlist.sort(reverse=True)
#print self.compentlist
#print self.compentlist[0]
self.aa[result]=self.compentlist[0]
else:
for self.subb in self.compentlist:
#print self.subb
#print '-'*50
self.suburl=self.url+'/'+self.subb
#print self.suburl
self.openurl(self.suburl) def openurl(self,url):
#self.url=url
#print url
a=self.opener.open(url)
data=a.read()
patten='href="(\w*?)/"'
self.compentlist=re.findall(patten,data) if 'mvp' in "".join(self.compentlist) or 'GXVCP' in ''.join(self.compentlist):
urldd = urlparse(url)
result=urldd.path.split('/')[-1]
self.compentlist.sort(reverse=True)
# print self.compentlist
# print self.compentlist[0]
self.aa[result]=self.compentlist[0]
else:
for self.subb in self.compentlist:
#print self.subb
#print '-'*50
self.suburl=url+'/'+self.subb
#print self.suburl
self.openurl(self.suburl) def result(self):
return self.aa #配置文件判断及读取
config=ConfigParser.ConfigParser()
if not os.path.exists('config.ini'):
print "config.ini is not exists,please check it!!"
exit(-1) config.read('config.ini')
print
print "You want to check follow Component:"
print config.get('server1','compent')
print config.get('Server2','compent') #SSH远程操作函数
def ssh2(ip,pt,pw,us,comm):
try:
ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,port=int(pt),username=us,password=pw)
#for COMM in comm:
stdin,stdout,stderr = ssh.exec_command(comm)
print "The Installed Version is :",
read = stdout.read()
#print read
compi=re.compile('Implementation-Version:(.*)')
qq=re.search(compi,read).group(1)
#print '======================'
print "\033[36m %s \033[0m" % (qq.strip())
print '-'*30
ssh.close()
except Exception,e:
print "\033[36mError\033[0m is :",ip,e class testCheckVersion(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def testVersion(self):
#self.assert(1==2)
pass if __name__ == '__main__':
#print config.sections()
server=config.get('SVN','svnserver')
user=config.get('SVN','user')
password=config.get('SVN','password')
url=config.get('SVN','url')
try: cc=snvparser(url,server,user,password)
result=cc.result()
except Exception,e:
print e
exit(-1)
#print result
#print '='*70 for section_name in config.sections():
if not section_name=='SVN':
print '='*70
configdd=dict(config.items(section_name))
#configdd=getconfig(section_name)
# print configdd
for compent in configdd['compent'].split(","):
try:
if compent=='sc' or compent=='bussinessAgent' or compent=='cag':
comm='cat %s%s-vcp/META-INF/MANIFEST.MF' % (configdd['dir'],compent)
print "The SVN \033[31m %-13s \033[0m Version is:" % compent ,
print "\033[36m %s \033[0m" % result[compent]
ssh2(configdd['ipaddr'],configdd['port'],configdd['password'],us='root',comm=comm)
if compent=='ghomeAgent':
comm='cat %s%s/META-INF/MANIFEST.MF' % (configdd['dir'],compent)
print "The SVN \033[31m %-13s \033[0m Version is:" % compent,
print "\033[36m %s \033[0m" % result[compent]
ssh2(configdd['ipaddr'],configdd['port'],configdd['password'],us='root',comm=comm)
if compent=='bms':
comm='cat %sbms/apache-tomcat-6.0.36/webapps/bms/META-INF/MANIFEST.MF' % configdd['dir']
print "The SVN \033[31m %-13s \033[0m Version is:" % compent,
print "\033[36m %s \033[0m" % result[compent]
ssh2(configdd['ipaddr'],configdd['port'],configdd['password'],us='root',comm=comm)
#if compent=='IfTImg' or compent=='Stream' or compent=='TransDownload':
#comm='ls /home/gx'
#print result except KeyError,e:
print "Please Check input !",e
except Exception,e:
print "Error",e
print '='*70

在写完程序后才发现,公司的SVN 命令太不规范,甚至单词也有拼错;目录安装也非常随意,查看版本方式多样花。一时没心情再将程序往下写了,有需要的可以根据实际情况更改

程序运行如下:

[root@localhost tools]# python checkVersion.py
['sc', 'bussinessAgent', 'cag', 'bms', 'ghomeAgent', 'server1', 'Server2']
======================================================================
sc
:: The Installed Version is: 'NoneType' object has no attribute 'group'
The SVN NESTEST Version is : GXVCP_sc_D10V200_alpha1
======================================================================
bussinessAgent
[Errno None] Unable to connect to port on or 192.168.14.31 --#服务器密码被更改了
The SVN NESTEST Version is : GXVCP_businessAgent_D10V200_alpha1
======================================================================
cag
:: The Installed Version is: 'NoneType' object has no attribute 'group' ---文件已改名了
The SVN NESTEST Version is : GXVCP_cag_D10V200_alpha1
======================================================================
bms
[Errno None] Unable to connect to port on or 192.168.14.31
The SVN NESTEST Version is : GXVCP_bms_D10V200_alpha1
======================================================================
ghomeAgent
:: The Installed Version is: GXVCP_ghomeAgent_D10V200_alpha1
------------------------------
The SVN NESTEST Version is : GXVCP_ghomeAgent_D10V200_alpha1
======================================================================

从SVN一键对比版本的更多相关文章

  1. svn还原到指定版本

    svn还原到指定版本 1,选中文件夹,右健,show log 2,选中指定版本,右健,Revert to this revision 3,svn commit 4,ok

  2. svn回复历史版本的操作方法

    svn恢复历史版本的操作方法svn update 保证最新svn log login.php 获得版本号svn diff -r 11026:11027 login.php 发现11027出问题svn ...

  3. 细说SVN集中式版本控制器

    svn全称Subversion,实现多人开发同一个项目时,对源代码进行管理的工具.在公司里边,一个项目是由多人同时在开发,大家在本地自己电脑开发php代码,完毕后就commit上传给服务器运行.  如 ...

  4. SVN仓库连同版本信息迁移新服务器的步骤

    SVN仓库连同版本信息迁移新服务器的步骤 步骤一:导出(1)链接原服务器,找到SVN Server安装路径下的bin文件,并复制文件路径,如 C:\Program File\SVN Server\bi ...

  5. linux进阶之SVN集中式版本控制系统篇

    代码上线--版本控制系统 SVN             集中式版本控制系统 git                 分布式版本控制系统 SVN是subversion的缩写,即版本控制系统,是一个开放 ...

  6. SVN集中式版本控制器的安装、使用与常见问题汇总

    SVN是Subversion的简称,是一个开放源代码的版本控制系统,它采用了分支管理系统,集中式版本控制器 官方网站:https://www.visualsvn.com/ 下载右边的服务器端,左边的客 ...

  7. SVN源代码的版本控制系统使用简介

    SVN是以个开放源代码的版本控制系统,当前最流行的版本控制系统,GIT是近段时间刚兴起的. 下面开始介绍如何安装也配置 1先下载或者从别的地方弄一个安装包(本人是64位的,32位的就用32位的安装包) ...

  8. SVN 集中式版本控制软件

    简介: 目前流行的版本控制软件中,SVN ( 集中式版本控制 ) 算是使用范围更广.且使用时间更早的一款了,现在 git ( 分布式版本控制 ) 更火爆一点. 一.安装svn [root@localh ...

  9. Linux svn 回滚版本库

    Linux代码   svn up Index/ 然后找出要撤销的确切版本: Linux代码   svn log --limit 10 Index/tpl/css/global.css 根据log怀疑是 ...

随机推荐

  1. Arrays.sort和Collections.sort实现原理解析

    Arrays.sort和Collections.sort实现原理解析 1.使用 排序 2.原理 事实上Collections.sort方法底层就是调用的array.sort方法,而且不论是Collec ...

  2. css样式DEMO

    <!-- 导入框 --> <div id="importWin" class="easyui-window" title="服务封装 ...

  3. (转)MFC鼠标单击消息拦截双击消息

    如果LButtonDown和LButtonDblClk同时有实现的话 总会实现单击消息,在网上找解决方法,思想是在单击消息实现中取时间,计算两次单击事件的时间差 来回尝试修改,最后成这个样子,还算简单 ...

  4. 【Java面试题】39 Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

    1.什么是Set?(what) Set是Collection容器的一个子接口,它不允许出现重复元素,当然也只允许有一个null对象. 2.如何来区分重复与否呢?(how) “ 用 iterator() ...

  5. CentOS7忘记root密码的解决方法

    开机启动centos 7.0,看到如下画面,选择下图选单,按"e"键 在下图linux16行中,将ro这两个字母修改为rw init=/sysroot/bin/sh 修改结果如下图 ...

  6. JavaStuNote 5

    接口 (interface) 一个抽象类,全部的方法都是抽象的,全部方法的public, 我们把这种类叫做极度抽象类,是最干瘪的类. public abstract class A { public  ...

  7. delphi7中添加QuickRep

    具体的方法是: delphi主菜单的Project|Options命令, 在Package选项卡的Desing packages列表中如果可以看到QuickReport Components选项, 那 ...

  8. parameter "timeout" in socketchannel does not work

    // Accept the connection and make it non-blocking SocketChannel socketChannel = serverSocketChannel. ...

  9. work,i/o最小线程设置

    设置work i/o最小线程有两种方式1.通过配置文件设置,影响所有iis部署程序(待验证)2.通过程序代码设置,iis上部署的程序互不影响int minWorker, minIOC; //Get t ...

  10. Java精选笔记_DBUtils工具

    DBUtils工具 API介绍 为了更加简单地使用JDBC,Apache组织提供了一个工具类库commons-dbutils组件. 该组件实现了对JDBC的简单封装,可以在不影响性能的情况下极大简化J ...