分享一份生产环境下的fabric代码

简介:

PHP代码更新:

#!/usr/bin/env python

# -*- coding:utf-8 -*-


from fabric.api import *

from fabric.context_managers import *

from fabric.contrib.console import confirm

from fabric.colors import *

import time,sys,os


#==============登录远程主机变量设置====================

env.hosts=['opuser@10.0.0.111:22','opuser@10.0.0.112:22','opuser@10.0.0.115:22']

#env.password='1234'


#===============更新程序变量设置=======================

env.dev_dir='/app/webapps/'

env.pro_backup_date=time.strftime("%Y%m%d%H%M")

env.deploy_dir='/opt/app/webapps/'

env.pre_deploy_dir='/opt/app/prewebapps/'

env.deploy_tmp_dir='/home/opuser/upload/'

env.deploy_backup_dir='/data01/backup/php'

env.pro_name=prompt("please input programe name:",default="opuser.test.com")

env.pro_versionID=prompt("please input versionID:",default="0.0.0.0") 

env.sourceProdRoot='/opt/app/webapps2/'


@task

def backup_task():

    print red("Start to backup programe...")

    env.pro_backup_name=prompt("Please input backup project name:",default="opuser.test.com")

    with settings(warn_only=True):

         run("cd %s && tar -czf %s.%s.backup.tar.gz --exclude %s/logs %s" % (env.deploy_dir,env.pro_backup_name,env.pro_backup_date,env.pro_backup_name,env.pro_backup_name))

         run("cd %s && mv %s.%s.backup.tar.gz %s" % (env.deploy_dir,env.pro_backup_name,env.pro_backup_date,env.deploy_backup_dir))

    print green("Backuped project packages success! ")

    


#@runs_once

@task

def tar_task():

    print yellow("Start to tar source package...")

    local("cd %s%s && rm -rf %s/index.php && tar -czf %s.tar.gz --exclude=logs --exclude .svn %s" % ( env.dev_dir,env.pro_name,env.pro_versionID,env.pro_name,env.pro_versionID))

    print green("Creating source packages success!")


@task

def put_update_task():

    run("mkdir -p /home/opuser/upload/%s" % (env.pro_name))

    env.deploy_full_path=env.deploy_tmp_dir + env.pro_name

    with settings(warn_only=True):

         result = put(env.dev_dir + env.pro_name +"/"+ env.pro_name +".tar.gz",env.deploy_full_path)

    if result.failed and not confirm("put file failed,Continue[Y/N]?"):

         abort("Aborting file put task!")

    with settings(warn_only=True):

         lmd5=local("md5sum /app/webapps/%s/%s.tar.gz" % (env.pro_name,env.pro_name),capture=True).split(' ')[0]

         rmd5=run("md5sum /home/opuser/upload/%s/%s.tar.gz" % (env.pro_name,env.pro_name)).split(' ')[0]

    if lmd5==rmd5:

        print "OK"

    else:

        print "ERROR"

    with cd(env.deploy_full_path):

         run("tar xf %s.tar.gz && cd %s && \cp -rf * %s%s/" % (env.pro_name,env.pro_versionID,env.deploy_dir,env.pro_name))

         run("tar xf %s.tar.gz && cd %s && \cp -rf * %s%s/" % (env.pro_name,env.pro_versionID,env.pre_deploy_dir,env.pro_name))

         run("mv %s  %s" % (env.pro_versionID,env.pro_backup_date))

         run("rm -rf %s*" % (env.pro_name))

    print red("delete source tar file....")

         #time.sleep(2)

    with cd (env.dev_dir):

        local("cd /app/webapps/%s && rm -rf %s.tar.gz" % (env.pro_name,env.pro_name))


@runs_once

@task

def rollback():

    confirm("you are sure to rollback this project? Continue")

    print yellow("Start to rollback project...")

    with cd("/data/backup/php"):

         run("ls -l")

         env.rollback_pro_name=prompt("rollback project name:")

         run("cd %s && tar -xf %s -C %s" % (env.deploy_backup_dir,env.rollback_pro_name,env.deploy_dir))

    print green("rollback project success!")


@task

def checkcode():

    #env.sourceLatestVersion=run("ls -lt /home/opuser/upload/%s/|awk '{print $9}'|grep -v ^$|head -n 1" % (env.pro_name))

    #env.staticLatestVersion=run("ls -lt /home/opuser/upload/res.spp.com|awk '{print $9}'|grep -v ^$|head -n 1")

    with cd("/server/scripts"):

      # run("./deploy -alsologtostderr=true  -bakLimit=7 -sourceProdRoot=%s%s -sourceDevRoot=%s%s -staticDevRoot=%s/ -staticProdRoot=%s -staticRelativeDirs=%s" % (env.sourceProdRoot,env.pro_name,env.sourceDevRoot,env.pro_name,env.staticDevRoot,env.staticProdRoot,env.staticRelativeDirs)) 

        run("./deploy -alsologtostderr=true")


@task

def go():

    #backup_task()

    tar_task()

    put_update_task()

    #checkcode()


JAVA代码更新:

#!/usr/bin/env python

from fabric.api import *

from fabric.colors import *

from fabric.context_managers import *

from fabric.contrib.console import confirm

import time,os


env.hosts=['10.0.0.13','10.0.0.11','10.0.0.12']

env.user="opuser"

#env.password='Passw0d@!W'

env.port="52113"


env.app_local_dir="/app/webapps/app/java/"

env.backup_date=time.strftime("%Y%m%d%H%M")

env.pro_backup_dir="/data01/backup/java"

env.pro_name=prompt("please input app name:")

env.remote_app_dir="/opt/app/server/"

env.upload_temp_dir="/home/opuser/upload/"


@task

def backup_task():

    run("cd %s%s/webapps && tar -czf %s.%s.tar.gz *.war && mv %s.%s.tar.gz %s" % (env.remote_app_dir,env.pro_name,env.pro_name,env.backup_date,\

          env.pro_name,env.backup_date,env.pro_backup_dir))

    print "backup app success!!!"

    time.sleep(3)

    print red("Ready to upload Java update package.....")

    time.sleep(3)



@task

def upload_task():

    run("mkdir -p /home/opuser/upload/%s" % (env.pro_name))

    env.deploy_full_path=env.upload_temp_dir + env.pro_name

    with settings(warn_only=True):

         result = put(env.app_local_dir + env.pro_name +"/"+ "*.war",env.deploy_full_path)

         lmd5=local("md5sum /app/webapps/app/java/%s/*.war" % (env.pro_name),capture=True).split(' ')[0]

         rmd5=run("md5sum /home/opuser/upload/%s/*.war" %(env.pro_name)).split(' ')[0]

    if lmd5==rmd5:

       print "OK"

    else:

       print "ERROR" 


     #time.sleep(5)

       print green("Start off Tomcat service and update service packs.....")

       time.sleep(5)


@task

def shutdown_and_update():

    #Close Tomcat

    print red("start shutdown the %s...." % (env.pro_name))

    time.sleep(3)

    env.remote_app_pid=run("ps xua|grep %s|grep -v grep|awk '{print $2}'|tail -1" %(env.pro_name))

    if len(env.remote_app_pid)==0:

         #Delete the old version

         print red("start delete war packge.....")

         time.sleep(3)

         run("cd %s%s/webapps && rm -rf *" % (env.remote_app_dir,env.pro_name))


         #Update the new version    

         print green("Start update app ....")

         run("cd /home/opuser/upload/%s && cp *.war %s%s/webapps" % (env.pro_name,env.remote_app_dir,env.pro_name))

         time.sleep(3)

         run("cd /home/opuser/upload/%s && mv *.war %s-%s-backup " % (env.pro_name,env.pro_name,env.backup_date))

         time.sleep(5)

         print green("Update successfull.....please run to the app")

    else:

         run("cd %s%s && ./bin/shutdown.sh" % (env.remote_app_dir,env.pro_name))

         env.remote_app_pid=run("ps xua|grep %s|grep -v grep|awk '{print $2}'|tail -1" %(env.pro_name))

         if len(env.remote_app_pid)==0:

                print "%s is shutdown % (env.pro_name)"

                run("cd %s%s/webapps && rm -rf *" % (env.remote_app_dir,env.pro_name))

               

                #Update the new version    

                print green("Start update app ....")

                run("cd /home/opuser/upload/%s && cp *.war %s%s/webapps" % (env.pro_name,env.remote_app_dir,env.pro_name))

                time.sleep(3)

                run("cd /home/opuser/upload/%s && mv *.war %s-%s-backup " % (env.pro_name,env.pro_name,env.backup_date))

                time.sleep(5)

                print green("Update successfull.....please run to the app")

         else:

                env.remote_app_pid=run("ps xua|grep %s|grep -v grep|awk '{print $2}'|tail -1" %(env.pro_name))

                print "%s pid will be killed next .... "% (env.pro_name)

                run("/bin/kill -9 %s" % (env.remote_app_pid))

                time.sleep(5)

                print green("the app %s has been shutdown" % (env.pro_name))

                run("cd %s%s/webapps && rm -rf *" % (env.remote_app_dir,env.pro_name))

                

                #Update the new version    

                print green("Start update app ....")

                run("cd /home/opuser/upload/%s && cp *.war %s%s/webapps" % (env.pro_name,env.remote_app_dir,env.pro_name))

                time.sleep(3)

                run("cd /home/opuser/upload/%s && mv *.war %s-%s-backup " % (env.pro_name,env.pro_name,env.backup_date))

                time.sleep(5)

                print green("Update successfull.....please run to the app")

                  

                print yellow("###################################################")

                print green("                                                    \n")

            

@task

def start_task():

    print green("starting app ....")

    time.sleep(3)

    run("set -m;%s%s/bin/startup.sh" % (env.remote_app_dir,env.pro_name))

    time.sleep(5)

    env.remote_app_pid=run("ps xua|grep %s|grep -v grep|awk '{print $2}'|tail -1" %(env.pro_name))

    #print env.remote_app_pid

    if len(env.remote_app_pid)!=0:

         print blue("%s is startup successfull the pid is %s....."% (env.pro_name,env.remote_app_pid))




@task

def go():

    backup_task()

    upload_task()

    shutdown_and_update()

    start_task()


      本文转自027ryan  51CTO博客,原文链接: http://blog.51cto.com/ucode/1770052 ,如需转载请自行联系原作者




相关文章
|
6月前
|
存储 自然语言处理 算法
通过实际的例子,介绍编译器的工作过程
通过实际的例子,介绍编译器的工作过程
44 0
|
10月前
|
测试技术 数据安全/隐私保护 数据格式
如何编写一份高质量测试用例
如何编写一份高质量测试用例
|
10月前
|
存储 自然语言处理 编译器
程序的编译与链接(C语言为例) #代码写好后到运行期间要经过怎样的过程呢?# 粗略版 #
程序的编译与链接(C语言为例) #代码写好后到运行期间要经过怎样的过程呢?# 粗略版 #
|
12月前
|
前端开发 Java 测试技术
对个人博客系统进行web自动化测试(包含测试代码和测试的详细过程)(上)
对个人博客系统进行web自动化测试(包含测试代码和测试的详细过程)(上)
189 0
|
12月前
|
测试技术
对个人博客系统进行web自动化测试(包含测试代码和测试的详细过程)(下)
对个人博客系统进行web自动化测试(包含测试代码和测试的详细过程)(下)
125 0
|
缓存 Java fastjson
Java开发都需要参考的一份命名规范
好的命名能体现出代码的特征,含义或者是用途,让阅读者可以根据名称的含义快速厘清程序的脉络。不同语言中采用的命名形式大相径庭,Java中常用到的命名形式共有三种,既首字母大写的UpperCamelCase,首字母小写的lowerCamelCase以及全部大写的并用下划线分割单词的UPPERCAMELUNSER_SCORE。通常约定,类一般采用大驼峰命名,方法和局部变量使用小驼峰命名,而大写下划线命名通常是常量和枚举中使用。
Java开发都需要参考的一份命名规范
|
前端开发 计算机视觉 Python
代码报错还好说,源码报错才难搞!分享自己源码报错的解决过程!
代码报错还好说,源码报错才难搞!分享自己源码报错的解决过程!
86 0
代码报错还好说,源码报错才难搞!分享自己源码报错的解决过程!
|
编译器 C++
在C++学习的过程中如何使每个 .cpp单独运行
在C++学习的过程中如何使每个 .cpp单独运行
251 1
在C++学习的过程中如何使每个 .cpp单独运行
|
XML 算法 Java
一篇文章教你如何写出【✨无法维护✨】的代码?
一篇文章教你如何写出【✨无法维护✨】的代码?
162 0
一篇文章教你如何写出【✨无法维护✨】的代码?
BestMPRBaseVtk-002-修改工程,搬运官方代码并尝试理解-1
BestMPRBaseVtk-002-修改工程,搬运官方代码并尝试理解-1
108 0
BestMPRBaseVtk-002-修改工程,搬运官方代码并尝试理解-1