【python14】自动化部署tomcat

前提条件:
1、安装linux系统
2、打开linux系统的ssh服务
3、关闭linux系统远程防火墙
4、在linux系统安装tomcat服务
5、提前准备好应用war包
6、需要安装paramiko服务

使用场景:
节省重复又麻烦的手动部署动作,自动化多服务部署提高效率。

第一步:安装jdk依赖包
第二步:安装tomcat包

#coding=utf-8

import paramiko
import time

# 创建SSH客户端用来远程连接服务器进行操作
class sshClient:

    # 构造函数,创建一个ssh服务对象
    def __init__(self, host, port, username, password):
        self.host = host
        self.port = port
        self.username = username
        self.password = password

        try:
            self.ssh = paramiko.SSHClient()
            self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            self.ssh.connect(self.host, self.port, self.username, self.password)
        except Exception as e:
            print "ssh链接失败:①请检查ip、端口、用户名、密码是否错误;②请检查目标服务是否开启ssh并关闭防火墙。", e

    # 调用远程命令的函数
    def cmd(self, cmd):
        try:
            transport = self.ssh.get_transport()
            channel = transport.open_session()  # 连接成功后打开一个channel
            channel.get_pty()   # 打开远程的terminal
            channel.exec_command(cmd)   # 执行cmd命令

            result = []
            while True:
                r = channel.recv(1024) # 接收socket返回的数据
                if not r:
                    break
                else:
                    result.append(r)
            channel.close()
            return "".join(result)
        except Exception as e:
            print "cmd执行失败。", e

    # 下载远程地址的文件
    def down(self, localdir, romatedir):
        try:
            ftp = self.ssh.open_sftp()
            ftp.get(romatedir, localdir)
            ftp.close()
        except Exception as e:
            print "文件下载失败。", e

    # 上传本地文件到远程地址
    def upload(self, localdir, romatedir):
        try:
            ftp = self.ssh.open_sftp() # 通过ssh打开ftp通讯通道
            ftp.put(localdir, romatedir)
            ftp.close()
        except Exception as e:
            print "文件上传失败。", e

    # 关闭ssh链接
    def close(self):
        self.ssh.close()


# 创建自动化部署Tomcat服务,用于自动化部署和运行
class deployTomcat:

    def __init__(self, host, port, username, password, tomcaturl, localurl, romateurl):
        self.host = host
        self.port = port
        self.username = username
        self.password = password
        self.tomcaturl = tomcaturl
        self.localurl = localurl
        self.romateurl = romateurl

    def install(self):
        ssh = sshClient(self.host, self.port, self.username, self.password)
        # 杀死Tomcat线程
        print "\033[1;35m正在执行杀死Tomcat线程...\033[0m"
        ssh.cmd("ps aux | grep " + self.tomcaturl + " | grep -v grep | awk '{print $2}' | xargs kill -9")

        print ""

        # 创建Tomcat7文件夹
        print "\033[1;35m创建Tomcat7文件夹...\033[0m"
        print ssh.cmd("rm -rf " + self.tomcaturl + ";mkdir " + self.tomcaturl)

        print ""

        # 上传Tomcat安装包
        print "\033[1;35m上传Tomcat安装包...\033[0m"
        print ssh.upload(self.localurl, self.romateurl)

        print ""

        # 解压并安装Tomcat
        print "\033[1;35m解压并安装Tomcat...\033[0m"
        print ssh.cmd("tar -xzf " + self.romateurl + " -C "+ self.tomcaturl +" --strip-components 1")

        print ""

        # 启动tomcat
        print "\033[1;35m启动tomcat...\033[0m"
        print ssh.cmd("nohup " + self.tomcaturl + "/bin/startup.sh")

        print ""

        # 查看tomcat日志
        print "\033[1;35m查看tomcat日志...\033[0m"
        print ssh.cmd("cat " + self.tomcaturl + "/logs/catalina.out")

        print ""

        # 检查tomcat是否启动
        print "\033[1;35m检查tomcat是否启动...\033[0m"
        print ssh.cmd("ps aux | grep " + self.tomcaturl + " | grep -v grep | awk '{print $2}'")

        # 关闭ssh
        ssh.close()


if __name__ == "__main__":

    host = "172.20.10.10"
    port = 22
    username = "root"
    password = "xxxx"
    tomcaturl = "/usr/local/tomcat7"
    localurl = "/Users/xxxx/Desktop/apache-tomcat-7.0.54.tar.gz"
    romateurl = tomcaturl + "/apache-tomcat-7.0.54.tar.gz"

    dep = deployTomcat(host, port, username, password, tomcaturl, localurl, romateurl)
    dep.install()

第三:上传应用并启动tomcat

#coding=utf-8

import paramiko
import time

# 创建SSH客户端用来远程连接服务器进行操作
class sshClient:

    # 构造函数,创建一个ssh服务对象
    def __init__(self, host, port, username, password):
        self.host = host
        self.port = port
        self.username = username
        self.password = password

        try:
            self.ssh = paramiko.SSHClient()
            self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            self.ssh.connect(self.host, self.port, self.username, self.password)
        except Exception as e:
            print "ssh链接失败:①请检查ip、端口、用户名、密码是否错误;②请检查目标服务是否开启ssh并关闭防火墙。", e

    # 调用远程命令的函数
    def cmd(self, cmd):
        try:
            '''
            stdin, stdout, stderr = self.ssh.exec_command(cmd, get_pty=True)
            err = stderr.readlines()
            if len(err) > 0:
                print err
            for std in stdout.readlines():
                print std,
            '''
            transport = self.ssh.get_transport()
            channel = transport.open_session()  # 连接成功后打开一个channel
            channel.get_pty()   # 打开远程的terminal
            channel.exec_command(cmd)   # 执行cmd命令

            while True:
                result = channel.recv(1024)   # 接收socket返回的数据
                if not result:
                    break
                print result,
            channel.close()
        except Exception as e:
            print "cmd执行失败。", e

    # 下载远程地址的文件
    def down(self, localdir, romatedir):
        try:
            ftp = self.ssh.open_sftp()
            ftp.get(romatedir, localdir)
            ftp.close()
        except Exception as e:
            print "文件下载失败。", e

    # 上传本地文件到远程地址
    def upload(self, localdir, romatedir):
        try:
            ftp = self.ssh.open_sftp() # 通过ssh打开ftp通讯通道
            ftp.put(localdir, romatedir)
            ftp.close()
        except Exception as e:
            print "文件上传失败。", e

    # 关闭ssh链接
    def close(self):
        self.ssh.close()


# 创建自动化部署Tomcat服务,用于自动化部署和运行
class deployTomcat:

    def __init__(self, host, port, username, password, tomcaturl, localwarurl, romatewarurl):
        self.host = host
        self.port = port
        self.username = username
        self.password = password
        self.tomcaturl = tomcaturl
        self.localwarurl = localwarurl
        self.romatewarurl = romatewarurl

    def run(self):
        ssh = sshClient(self.host, self.port ,self.username, self.password)
        '''
            自动化部署tomcat
            1.关闭tomcat服务
            2.杀死tomcat线程
            3.备份应用
            4.删除老应用
            5.上传代码war包
            6.启动tomcat服务
            7.打印tomcat日志
            8.检查tomcat是否启动
        '''

        print ""

        # 关闭Tomcat服务
        print "\033[1;35m正在执行关闭Tomcat服务...\033[0m"
        print self.tomcaturl + "/bin/shutdown.sh"
        ssh.cmd(self.tomcaturl + "/bin/shutdown.sh")

        print ""

        # 杀死Tomcat线程
        print "\033[1;35m正在执行杀死Tomcat线程...\033[0m"
        ssh.cmd("ps aux | grep " + self.tomcaturl + " | grep -v grep | awk '{print $2}' | xargs kill -9")

        print ""

        # 备份应用
        print "\033[1;35m正在执行备份应用...\033[0m"
        ssh.cmd('cp -r ' + self.tomcaturl + '/webapps/webtest ' + self.tomcaturl + '/webtest_' + time.strftime('%Y%m%d_%H%M%S'))

        print ""

        # 删除老版本应用
        print "\033[1;35m正在执行删除老版本应用...\033[0m"
        ssh.cmd('rm -rf ' + self.tomcaturl + '/webapps/webtest*')

        print ""

        # 上传代码war包
        print "\033[1;35m正在执行上传代码war包...\033[0m"
        ssh.upload(self.localwarurl, self.romatewarurl)

        print ""

        # 启动tomcat
        print "\033[1;35m正在执行启动Tomcat服务...\033[0m"
        ssh.cmd("nohup " + self.tomcaturl + "/bin/startup.sh")

        print ""

        # 查看tomcat日志
        print "\033[1;35m正在执行查看Tomcat日志...\033[0m"
        ssh.cmd("cat " + self.tomcaturl + "/logs/catalina.out")

        print ""

        # 检查tomcat是否启动
        print "\033[1;35m正在执行检查Tomcat是否启动...\033[0m"
        ssh.cmd("ps aux | grep " + self.tomcaturl + " | grep -v grep | awk '{print $2}'")

        # 关闭ssh
        ssh.close()

if __name__ == "__main__":
    #ssh = sshClient("172.20.10.5", 22, "root", "xxx")
    #ssh.cmd("cd /etc;ls -i")
    #ssh.cmd("top")
    #ssh.cmd("ping www.baidu.com")

    '''
        自动化部署tomcat
        1.关闭tomcat服务
        2.杀死tomcat线程
        3.备份应用
        4.删除老应用
        5.上传代码war包
        6.启动tomcat服务
        7.打印tomcat日志
        8.检查tomcat是否启动
    '''

    host = "172.20.10.5"
    port = 22
    username = "root"
    password = "xxx"
    tomcaturl = "/usr/local/tomcat7"
    localwarurl = "/Users/xxx/Desktop/webtest.war"
    romatewarurl = tomcaturl + "/webapps/webtest.war"

    print "自动化部署Tomcat服务,IP ",host, "开始"
    dep = deployTomcat(host, port, username, password, tomcaturl, localwarurl, romatewarurl)
    dep.run()
    print "自动化部署Tomcat服务,IP ", host, "结束"


    host = "172.20.10.6"
    port = 22
    username = "root"
    password = "xxx"
    tomcaturl = "/usr/local/tomcat7"
    localwarurl = "/Users/xxx/Desktop/webtest.war"
    romatewarurl = tomcaturl + "/webapps/webtest.war"

    print ""

    print "自动化部署Tomcat服务,IP ", host, "开始"
    dep = deployTomcat(host, port, username, password, tomcaturl, localwarurl, romatewarurl)
    dep.run()
    print "自动化部署Tomcat服务,IP ", host, "结束"
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,076评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,658评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,732评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,493评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,591评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,598评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,601评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,348评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,797评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,114评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,278评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,953评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,585评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,202评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,180评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,139评论 2 352

推荐阅读更多精彩内容