公司的部署程序太多,每次部署安装完后,还得从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. 获得android手机的联网状态

    获得android手机的联网状态   在Android平台上开发基于网络的应用,必然需要去判断当前的网络连接情况.下面的代码,作为例子,详细说明了对于当前网络情况的判断. 先看一个自己定义的应用类. ...

  2. 关于Cocos2d-x中addchild和removeChild方法的参数的解析

    一.addchild virtual void addchild( Node * child , int localZOrder , int tag )添加一个子节点到容器中,有Z轴顺序和一个标记. ...

  3. selenium测试(Java)--告警框处理(十四)

    下面代码中介绍了告警框的处理方法 package com.test.alerthandle; import org.openqa.selenium.By; import org.openqa.sele ...

  4. Spring零散所得

    Spring容器中bean的id或name,都可以有多个,且第一个为标识符(Qualifier),其余皆为别名(Alias).所以都可以通过applicationContext.getBean(&qu ...

  5. 3D游戏与计算机图形学中的数学方法-点线面

    <易传·系辞上传>:”易有太极,是生两仪,两仪生四象,四象生八卦.” 借用一下古代先人们的智慧引一下本文的主题-三维图形中的点线面,在三维几何中也有一句话可以和上面的话相对应:由点成线,由 ...

  6. 五步让你玩转CocoaPods

    1 安装和升级 $ sudo gem install cocoapods  $ pod setup 2 更换为taobao的源 $ gem sources -r https://rubygems.or ...

  7. Webpack vs Gulp(转载)

    理想的前端开发流程 在说构建工具之前得先说说咱期望的前端开发流程是怎样的? 写业务逻辑代码(例如 es6,scss,pug 等) 处理成浏览器认识的(js,css,html) 浏览器自动刷新看到效果 ...

  8. DropDownList添加客户端下拉事件操作

    如果要想给 DropDownList 服务器控件添加客户端下拉事件,我们可以强制给它添加 onchange 事件,尽管在控件中没有这个方法的提示.添加完这个事件还不能达到目的,还要设置 AutoPos ...

  9. c #include "" 和 <>

    <>先去系统目录中找头文件,如果没有在到当前目录下找.所以像标准的头文件 stdio.h.stdlib.h等用这个方法. 而""首先在当前目录下寻找,如果找不到,再到系 ...

  10. CreateEvent和SetEvent及WaitForSingleObject的使用方法

    CreateEvent: 1.函数功能: 创建一个命名或匿名的事件对象 2.函数原型: HANDLE CreateEvent(   LPSECURITY_ATTRIBUTES lpEventAttri ...