landhu

公司的部署程序太多,每次部署安装完后,还得从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 "\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 
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 
======================================================================

 

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2021-09-21
  • 2021-10-12
  • 2022-01-28
  • 2021-11-03
  • 2022-12-23
猜你喜欢
  • 2021-06-22
  • 2021-11-12
  • 2021-11-29
  • 2021-08-12
  • 2022-01-07
  • 2021-12-04
相关资源
相似解决方案