SOA自动部署脚本(发布、更新、回滚)

  1. 脚本功能

    使用该脚本完成SOA工程的全量更新、增量更新、全量回滚等操作。

  2. 自动部署流程

3. 脚本代码

#!/usr/bin/python
#coding=utf-8
import sys,os,re,time,commands,logging
work_dir=‘/data/company/soa‘
package_dir=‘/data/package/soa‘
update_file_path=‘/data/update/‘
check_dir=os.path.exists(work_dir)
update_dir=os.path.exists(update_file_path)
data=os.listdir(update_file_path)
def Total_update():
    flag=0
    num=0
    while num <3:
        filename=raw_input(‘\033[1;31;40m请输入需要更新的完整包名:\033[0m‘)
        os.chdir(package_dir)
        result=os.path.lexists(filename)
        if result == 1:
            flag+=1
            break
        else:
            num+=1
            print ‘\033[1;31;40m您输入的包名不存在,请重新输入!\033[0m‘
    a=re.findall(r‘^-soa-\d{14}.war$‘,filename)
    filename_str=str(a).lstrip(‘[\‘‘).rstrip(‘\‘]‘)
    if len(filename_str) != 0:
        flag+=1
     else:
        sys.exit()

    if flag == 2:
        time_tag=time.strftime("%Y%m%d%H%M%S", time.localtime())
        release_dir=work_dir + ‘_‘ + time_tag
        os.mkdir(release_dir)
        os.system(‘rm -rf %s‘ %work_dir)
        os.system(‘unzip %s -d %s‘ %(filename,release_dir))
        os.system(‘ln -s %s %s‘ %(release_dir,work_dir))
        info=‘软件包已成功更新至:‘ + release_dir
        log_text(info)
        print ‘\033[1;31;40m %s \033[0m‘ %info
        
def log_text(info):
    logging.basicConfig(level=logging.DEBUG,
                format=‘%(asctime)s  %(message)s‘,
                datefmt=‘%d %b %Y %H:%M:%S‘,
                filename=‘/data/logs/update_soa.log‘,
                filemode=‘a‘)
    logging.debug(info)
    
def Incrementally_udate():
    if update_dir != 1:
        print ‘\033[1;31;40m创建更新文件存储目录!\033[0m‘
        os.system(‘mkdir -p %s‘ %update_file_path)
        sys.exit()
    if check_dir == 1:
        os.chdir(work_dir)
        find_command=‘find . -name "%s" ‘ %update_file
        aresult=commands.getoutput(find_command)
        if len(aresult) != 0:
            file_path=aresult.rstrip(update_file)
            os.chdir(file_path)
            time_tag=time.strftime("%Y%m%d%H%M%S", time.localtime())
            bak_result=commands.getstatusoutput(‘mv %s %s.%s‘ %(update_file,update_file,time_tag))
            if bak_result[0] == 0:
                update_file_abs_path=update_file_path + update_file
                update_result=commands.getstatusoutput(‘mv -i %s %s‘ %(update_file_abs_path,update_file))
                if update_result[0] == 0:
                    result=os.listdir(update_file_path)
                    info=‘更新‘ + work_dir + aresult.lstrip(‘\.‘) + ‘成功‘
                    log_text(info)
                    print ‘\033[1;31;40m %s \033[0m‘ %info
        else:
            print ‘\033[1;31;40m工程目录中无此文件!\033[0m‘
            sys.exit()
    else:
        print ‘\033[1;31;40m工程目录不存在!\033[0m‘
        sys.exit()
        
def rollback():
    def find_soa(i):
        a=re.findall(r‘soa_\d{14}$‘,i)
        return a
    os.chdir(‘/data/company‘)
    soa_list=os.listdir(‘/data/company‘)
    result=filter(find_soa,soa_list)
    sort_list=[]
    for t in result:
        sort_list.append(t.split(‘soa_‘)[1])
    sort_list.sort()
    back_ver=‘soa_‘ + sort_list[-2]
    last_ver=‘soa_‘ + sort_list[-1]
    os.system(‘rm -rf /data/company/%s‘ %last_ver)
    os.system(‘rm -rf /data/company/soa‘)
    os.system(‘ln -s %s /data/company/soa‘ %back_ver)
    info=‘代码回滚至:‘ + back_ver
    log_text(info)
    print ‘\033[1;31;40m %s \033[0m‘ %info
    
if __name__ == ‘__main__‘:
    while True:
        print ‘\033[1;31;40m‘
        print ‘‘‘
********* SOA 程序更新 *********

1.全量更新

2.增量更新

3.代码回滚

4.退出程序

*********************************
‘‘‘
        print ‘\033[0m‘

        choice=raw_input(‘\033[1;31;40m请输入您的选择:\033[0m‘)
        if choice == ‘1‘:
            print  ‘\033[1;31;40m‘
            print  ‘您选择的项目是全量更新‘
            print ‘\033[0m‘
            Total_update()
        if choice == ‘2‘:
            print  ‘\033[1;31;40m‘
            print  ‘您选择的项目是增量更新‘
            print ‘\033[0m‘
            if len(data) == 0:
                print ‘\033[1;31;40m无更新文件,请检查!\033[0m‘
            backup_tag=time.strftime("%Y%m%d%H%M%S", time.localtime()) + ‘zengliangbeifen‘
            bresult=commands.getoutput(‘ls -l %s‘ %work_dir)
            real_dir=str(bresult.split(‘->‘)[-1])
            os.chdir(‘/data/company‘)
            os.system (‘cp -r %s %s_%s‘ %(real_dir,real_dir,backup_tag))
            for update_file in data:
                Incrementally_udate()
        if choice == ‘3‘:
            print  ‘\033[1;31;40m‘
            print  ‘您选择的项目是代码回滚‘
            print ‘\033[0m‘
            rollback()
        if choice == ‘4‘:
            print  ‘\033[1;31;40m‘
            print  ‘您选择的项目是退出程序‘
            print ‘\033[0m‘
            sys.exit()
时间: 2024-12-13 19:19:39

SOA自动部署脚本(发布、更新、回滚)的相关文章

使用shell脚本自动部署(发布,重起)maven(java)项目

项目结构如下图 一:系统环境 本机:10.4.18.3 服务器: 10.4.18.4,用户名: web02 二:初始化服务器环境 在服务器上的家目录创建目录deploy,deploy/profile mkdir -p /home/web01/deploy mkdir -p /home/web02/deploy/profile 安装jdk export JAVA_HOME=/home/web02/jdk1.7.0_67 三:源代码(这里演示了一个自己写的http web服务器) com.lala.

jenkins服务器免密登录tomcat jenkins发布or回滚插件

安装maven91 gitlab-ctl start 92 /etc/init.d/jenkins start上传所需安装包查看自身jdk环境93 rpm -qa | grep jdk94 rpm -e java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.x86_64 java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64 --nodeps #卸载自身jdk环境95 tar zxf jdk-8u

rsyslog客户端自动部署脚本,经测试使用正常

自动写的rsyslog客户端自动配置脚本,经测试正常使用 #!/bin/bash #Install & Config the rsyslog #Release 0.3 #date 2016.10.10 #set -x #此脚本为log自动部署脚本 #版本较早系统自带syslog,较新版本自带rsyslog #手动配置如下, #在/etc/rsyslog中追加以下配置,然后重启/etc/init.d/rsyslog restart #  user.* @172.16.16.20 #  authpr

【原创】jenkins+maven自动部署脚本

jenkins+maven自动部署脚本 2019-02-01 09:34:38 前提,所有主机都做了免密登录操作,相信下面的版本大家应该可以看得明白,我是两台服务器,但只放开了一个服务器的配置,原理很简单: 1.配置一些经常变化的变量 2.进入svn下载下来的源代码空间目录,然后编译 3.远程备份文件(很重要) 4.进入编译后的文件夹target,将文件拷贝至远程生产主机 5.远程重启服务,搞定! #!/bin/bash source /etc/profile #基础环境变量 SERVER_23

自动部署脚本-bash

from here !/bin/bash Check if user is root if [ $(id -u) != "0" ]; then Echo_Red "Error: You must be root to run this script" exit 1 fi . common.sh . basic_soft.sh . config_soft.sh paths config current_path=pwd config_path=$current_pat

Jenkins job的自动部署脚本

Jenkins job的自动部署脚本 需求: 1.从Jenkins的workspace中,将编译好的Java代码部署到D:\zzinfo\UserCenterCoordinator中 2.部署过程中,需要停止相关联的其他进程,如5558_CENTER64.exe | 5559_CENTER64_UserList.exe | APNs.exe 代码如下: #!/usr/local/env python3 # -*- coding:utf-8 -*- # author by Michael Ho #

Asp.net Core 使用Jenkins + Dockor 实现持续集成、自动化部署(四):发布与回滚

写在前面 我们以前windows跑.net Framework程序的时候,发布,自己乖乖的替换程序:备份,也是自己一个一个的重命名备份:回滚,发布遇到问题的回滚更是不用说了:运维很是怕我们 这些用windows的啊: 那全面拥抱linux的一一.net core 时代 ,是如何处理这些个问题的呢? 噔噔蹬蹬~请往下看. 运行环境 centos:7.2 cpu:1核 2G内存 1M带宽 Jenkins ver. 2.150.1 一台安装jenkins的机器. (本文例子不一定要安装jenkins,

k8s中helm安装部署,升级和回滚(chart,helm,tiller,StorageClass)

一.Helm介绍 helm是基于kubernetes 的包管理器.它之于 kubernetes 就如 yum 之于 centos,pip 之于 python,npm 之于 javascript 那 helm 的引入对于管理集群有哪些帮助呢? 更方便地部署基础设施,如 gitlab,postgres,prometheus,grafana 等 更方便地部署自己的应用,为公司内部的项目配置 Chart,使用 helm 结合 CI,在 k8s 中部署应用一行命令般简单 1.Helm用途 Helm把Kub

开放平台openapi模块自动部署脚本

#################################################################################### #coding=utf-8                                                     #脚本用途:OPENAPI和OPENHLS服务自动化安装脚本                                        #编写时间:2016年9月21日