python3 自动化部署javaweb系统到远程tomcat
来源:互联网 发布:商家给淘宝主播寄样品 编辑:程序博客网 时间:2024/06/07 08:28
最近刚刚学python,非想要做点东西不可。。。。
做了一个自动化部署的脚本,献丑了。
以下假设数据库与应用在一起
过程如下:
本地maven打包上传到服务器服务器数据库库备份服务器关闭tomcat服务器应用程序备份服务器清除应用、work服务器启动tomcat
/utils/SSHConnection.py ,远程操作工具类
#! /usr/bin/pythonimport osimport paramikoclass SSHConnection: __hostname = '' __port = 22 __username = '' __password = '' __ssh = '' def __init__ (self, hostname, port, username, password): self.__hostname = hostname self.__port = port self.__username = username self.__password = password def SSHClient(self): print ( 'ssh %s@%s ....' % (self.__username, self.__hostname) ) try: self.__ssh = paramiko.SSHClient() self.__ssh.set_missing_host_key_policy( paramiko.AutoAddPolicy() ) self.__ssh.connect(hostname = self.__hostname, username = self.__username, port = self.__port, password = self.__password) print ( 'ssh %s@%s success!!!' % (self.__username, self.__hostname) ) except Exception as e: print ( 'ssh %s@%s: %s' % (self.__username, self.__hostname, e) ) os._exit(0) def exec_command(self, command): print ('command:', command) stdin, stdout, stderr = self.__ssh.exec_command(command) err_list = stderr.readlines() if len( err_list ) > 0: print ('ssh exec remote command [%s] error: %s' % (command, err_list[0])) print (stdout.read().decode('utf-8')) def upload(self, src, dst): try: sftp = self.__ssh.open_sftp() except Exception as e: print ('open sftp failed:', e) os._exit(0) try: print ('uploading file: %s --> %s' % (src, dst)) sftp.put(src, dst) print ('uploaded file: %s --> %s' % (src, dst)) sftp.close() except Exception as e: print ('uploading file failed:', e) os._exit(0) def close(self): self.__ssh.close()
deploy.py,发布过程实现类
#! /usr/bin/pythonimport paramikoimport osimport timeimport sysimport configparserimport urllib import urllib.requestfrom utils import SSHConnectionclass Deploy: __config_file = '' def __init__ (self, config_file): self.__config_file = config_file def deploy(self): start = int(round(time.time() * 1000)) CONFIG_SECTIONS_GLOBAL = 'global' CONFIG_SECTIONS_LOCAL = 'local' CONFIG_SECTIONS_REMOTE = 'remote' NOW = time.strftime('%Y%m%d_%H%M%S') print ('loading config file:', self.__config_file) config = configparser.ConfigParser() config.read(self.__config_file) print ('loading config file success!') # global PROJECT_NAME = config.get(CONFIG_SECTIONS_GLOBAL, 'project_name') ENV = config.get(CONFIG_SECTIONS_GLOBAL, 'env') # local LOCAL_PROJECT_DIR = config.get(CONFIG_SECTIONS_LOCAL, 'project_dir') SRC = LOCAL_PROJECT_DIR + '/target/ROOT.war' # remote REMOTE_HOSTNAME = config.get(CONFIG_SECTIONS_REMOTE, 'hostname') REMOTE_PORT = config.getint(CONFIG_SECTIONS_REMOTE, 'port') REMOTE_USERNAME = config.get(CONFIG_SECTIONS_REMOTE, 'username') REMOTE_PASSWORD = config.get(CONFIG_SECTIONS_REMOTE, 'password') REMOTE_DB_USERNAME = config.get(CONFIG_SECTIONS_REMOTE, 'db_username') REMOTE_DB_PASSWORD = config.get(CONFIG_SECTIONS_REMOTE, 'db_password') REMOTE_DB_PORT = config.get(CONFIG_SECTIONS_REMOTE, 'db_port') REMOTE_DB_NAME = config.get(CONFIG_SECTIONS_REMOTE, 'db_name') TMP_DIR = config.get(CONFIG_SECTIONS_REMOTE, 'tmp_dir') BAK_DIR = config.get(CONFIG_SECTIONS_REMOTE, 'bak_dir') BAK_DB_DIR = BAK_DIR + '/db' BAK_APP_DIR = BAK_DIR + '/app' TOMCAT_HOME = config.get(CONFIG_SECTIONS_REMOTE, 'tomcat_home') APP_TEST_URL = config.get(CONFIG_SECTIONS_REMOTE, 'app_test_url') KEY_MAVEN_HOME = 'MAVEN_HOME' MAVEN_HOME = os.getenv(KEY_MAVEN_HOME) if (MAVEN_HOME == None): print ('没有配置环境变量[' + KEY_MAVEN_HOME + ']') os._exit(0) # 本地打包 cmd = MAVEN_HOME + '/bin/mvn -f' + LOCAL_PROJECT_DIR + '/pom.xml package -Denv=' + ENV + ' -Dmaven.test.skip=true -q' print ('Running local command:', cmd) os.system(cmd) print ('Running local command success, file path:', SRC) # 建立远程连接 ssh = SSHConnection.SSHConnection(REMOTE_HOSTNAME, REMOTE_PORT, REMOTE_USERNAME, REMOTE_PASSWORD) ssh.SSHClient() # war包上传 ssh.upload(SRC, TMP_DIR + '/ROOT.war') # 远程数据库备份 print ('backup database....') ssh.exec_command('mysqldump -u' + REMOTE_DB_USERNAME + ' -p' + REMOTE_DB_PASSWORD + ' ' + ' -P' + REMOTE_DB_PORT + ' ' + REMOTE_DB_NAME + ' > ' + BAK_DB_DIR + '/' + NOW + '.sql') print ('backup database success') # 远程关闭tomcat print ('stop tomcat....') ssh.exec_command(TOMCAT_HOME + '/bin/shutdown.sh') print ('stop tomcat success') print ('kill process....') ssh.exec_command('ps -ef | grep ' + TOMCAT_HOME + ' | grep -v grep | awk \'{print $2}\' | xargs kill -15') print ('kill process success') # 远程备份应用 print ('backup webapp....') ssh.exec_command('cp -r ' + TOMCAT_HOME + '/webapps/ROOT ' + BAK_APP_DIR + '/' + NOW) print ('backup webapp success') # 远程删除工程 print ('remove project....') ssh.exec_command('rm -rf ' + TOMCAT_HOME + '/webapps/ROOT*') print ('remove project success') # 远程清空缓存 print ('remove work....') ssh.exec_command('rm -rf ' + TOMCAT_HOME + '/work') print ('remove work success') # 远程移动war到tomcat下 print ('mv war....') SRC = TMP_DIR + '/ROOT.war' DST = TOMCAT_HOME + '/webapps/' ssh.exec_command( 'mv %s %s' % (SRC, DST)) print ('mv war success: %s --> %s' % (SRC, DST)) # 远程启动tomcat print ('start tomcat....') ssh.exec_command(TOMCAT_HOME + '/bin/startup.sh') print ('start tomcat success') # 关闭连接 ssh.close() # 检测是否成功 print ('connectionning', APP_TEST_URL, '....') response = urllib.request.urlopen(APP_TEST_URL) print ('connection', APP_TEST_URL, ' http code:', response.getcode()) if(response.getcode() == 200): print ('Success!') else: print ('Fail !!!') end = int(round(time.time() * 1000)) print ('deploy %s use time %dms.' % (PROJECT_NAME, (end - start)))if __name__ == '__main__': deploy = Deploy((sys.argv[1])) deploy.deploy()
deploy.bat 批处理调用deploy.py
@echo offpython deploy.py config\config-pc-qa.inipause
/config/config.ini,配置文件,
[global]project_name=projectenv=qa[local]project_dir=D:/workspace/project[remote]hostname=192.168.1.80port=22username=rootpassword=123456db_username=rootdb_password=123456db_port=3306db_name=projecttmp_dir=/tmpbak_dir=/baktomcat_home=/home/tomcat7app_test_url=http://192.168.1.80:8080
源码:https://github.com/xiaojianhx/deploy.git
阅读全文
1 0
- python3 自动化部署javaweb系统到远程tomcat
- Linux deepin系统远程部署项目到tomcat服务器
- 用xshell远程连接Linux部署Javaweb项目到tomcat服务器
- maven远程部署到tomcat
- javaweb项目部署到tomcat中
- 部署JavaWeb应用到Tomcat服务器上
- maven自动化:部署项目到tomcat
- maven自动化:部署项目到tomcat
- Maven配置自动化部署项目到tomcat
- 远程部署tomcat工程到Linux服务器
- Jenkins部署Web项目到远程tomcat
- Jenkins部署Web项目到远程tomcat
- Jenkins自动部署到(远程)tomcat服务器
- maven之远程部署到Tomcat
- cargo远程部署项目到tomcat
- Jenkins远程部署war包到tomcat
- Jenkins远程部署war包到tomcat
- idea部署项目到远程tomcat
- Apache Kafka 入门
- java、web项目建立与删除-20170626
- 专题:冒泡排序与快速排序
- Windows PE 工具
- 清华山维EPS二次开发VBS基础篇
- python3 自动化部署javaweb系统到远程tomcat
- 响铃:DR钻戒神曲有毒?谁才是品牌借势的解药?
- Android 加载成功、加载失败、加载中、无数据四个不同界面的切换
- 高低字节序转换(htonl、ntohl、htons、ntohs函数)
- php位运算的权限设计
- Java四种线程池的使用
- python异常
- 编写jQuery插件有哪些技巧?
- MySQL DATETIME类型和Timestamp之间的转换