zoukankan      html  css  js  c++  java
  • 从SVN一键对比版本

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

    比如下面的一个版本

    思路:

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

    配置文件内容如下:

    [server1]
    ipaddr=192.168.3.2
    password=qqqqq
    port=22
    dir=/home/gx/    ----##部件按装的位置
    compent=sc,cag,ghomeAgent,IfTImg,Stream,TransDownload  ---###服务器上安装的部件
    
    [Server2]
    ipaddr=192.168.14.31
    password=qqqqq
    port=22
    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 "33[36m %s 33[0m" % (qq.strip())
            print '-'*30
            ssh.close()
        except Exception,e:
            print "33[36mError33[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 33[31m %-13s 33[0m Version is:" % compent ,
                            print "33[36m %s 33[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 33[31m %-13s 33[0m Version is:" % compent,
                            print "33[36m %s 33[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 33[31m %-13s 33[0m Version is:" % compent,
                            print "33[36m %s 33[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 
    20160218 14:01:01 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 22 on  or 192.168.14.31  --#服务器密码被更改了
    The SVN NESTEST Version is : GXVCP_businessAgent_D10V200_alpha1 
    ======================================================================
    cag
    20160218 14:01:12 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 22 on  or 192.168.14.31
    The SVN NESTEST Version is : GXVCP_bms_D10V200_alpha1 
    ======================================================================
    ghomeAgent
    20160218 14:01:22 The Installed Version is:  GXVCP_ghomeAgent_D10V200_alpha1 
    ------------------------------
    The SVN NESTEST Version is : GXVCP_ghomeAgent_D10V200_alpha1 
    ======================================================================
  • 相关阅读:
    异或运算实现两数交换
    安装Keepalived namespaces.c:187: error: ‘SYS_setns’ undeclared (first use in this function)
    安装keepalived OpenSSL is not properly installed on your system. !!!
    jackson json转实体对象 com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException
    solr集群Server refused connection at: http://127.0.0.1:6060/solr/ego 注册zookeepr自动使用内网ip
    Solr java.sql.SQLException: null, message from server: "Host 'xxx' is not allowed to connect to this MySQL server
    Jackson中@JsonProperty等常用注解
    java.lang.ClassNotFoundException: XXX (no security manager: RMI class loader disabled)
    ActiveMQ学习总结------Spring整合ActiveMQ 04
    为什么嵌入式开发用memcpy()而不用strncpy()
  • 原文地址:https://www.cnblogs.com/landhu/p/5198023.html
Copyright © 2011-2022 走看看