分享一份生产环境下的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=[‘[email protected]:22‘,‘[email protected]:22‘,‘[email protected]: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=‘[email protected]!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()

时间: 2024-10-25 14:25:31

分享一份生产环境下的fabric代码的相关文章

EF 第三篇 生产环境下的数据迁移

前言 本文所谓数据迁移,直白点不如说成数据库升级.虽然大部分带服务器型的应用,所有客户端都是连到同一台服务器上,对这样的生产环境,数据库升级起来不是什么难事,用vs自带的Migration也好,执行sql脚本也好,都比较容易.然而在每家客户现场都要部署一台服务器的应用也不少,如果一家家手工地去升级数据库,那将是一个可怕的工作量.那么对于这样的环境要怎么做到自动升级数据库呢?相信大家也在网上搜了不少了EF关于生产环境下的数据迁移方案,然后99%搜到的都是使用vs自带的Migration命令方式迁移

Java生产环境下性能监控与调优详解

第1章 课程介绍(Java秒杀课程老师倾力打造)本章为大家介绍生产环境可能存在的问题和常用的性能监控工具,以及课程能学到什么,课程内容如何安排等,让大家对课程有个全貌的认识,从而更好的学习这门课程.1-1 为什么学习这门课程? 第2章 基于JDK命令行工具的监控本章带大家学习JDK的命令行监控工具的使用,包括jps.jinfo.jstat.jmap.jstack, 并结合MAT实战如何定位内存溢出,实战如何定位死循环和死锁.2-1 JVM的参数类型2-2 查看JVM运行时参数2-3 jstat查

生产环境下ftp的迁移并构建高可用

说明:这是1个小项目就两台DELL的服务器,和一台IP SAN存储(DELL MD3200i).原来是4台小服务器,而且服务器太老了,经常有问题,这回相当于一次ftp的迁移,以前用的是proftp,这次换成了vsftp.数据量有2.5T. 拓扑很简单: 系统:CENTOS 6.4(64bit) 高可用软件:corosync+pacemaker host:ftp1 192.168.1.190 ftp2  192.168.1.191 stonith(ipmi):ftp1 192.168.1.180

生产环境下的iptables

生产环境下的iptables设置,这是我自己的一点总结,浅显之处望大家指出批评,共同学习. 我的局域网为192.168.1.0/24. 1.先清空所有规则 iptables -F iptables -X iptables -Z iptables -t nat -F iptables -t nat -X iptables -t nat -Z 设置默认规则前开发ssh(6123)端口 iptables -A INPUT -i eth0 -s 192.168.1.0/24 -p tcp --dport

读生产环境下go语言最佳实践有感

最近看了一篇关于go产品开发最佳实践的文章,go-in-procution.作者总结了他们在用go开发过程中的很多实际经验,我们很多其实也用到了,鉴于此,这里就简单的写写读后感,后续我也争取能将这篇文章翻译出来.后面我用soundcloud来指代原作者. 开发环境 在soundcloud,每个人使用一个独立的GOPATH,并且在GOPATH直接按照go规定的代码路径方式clone代码. $ mkdir -p $GOPATH/src/github.com/soundcloud $ cd $GOPA

生产环境下was不允许重启,怎么办?

前段时间上线,遇到一个jndi的故障问题,怎么个问题呢?就是原在测试环境下没有问题,而在生产环境下无法连接生产数据库,当时找到问题所在,就是ibm工具自动生成一个在测试环境下连接的jndi的资源文件resources.xml,当时删除了,重启了server,无效.后来我考虑到这肯定是was缓存造成,因此想象缓存造成的原因,最后在测试环境下重启了was,问题解决了,但后来说生产环境是不可能重启was的,因此暂时困老了本人,后来所谓的领导说,他去找总架构师看有没有办法解决,可是时间不等人,过了2天依

[原]生产环境下的nginx.conf配置文件(多虚拟主机)

[原]生产环境下的nginx.conf配置文件(多虚拟主机) 2013-12-27阅读110 评论0 我的生产环境下的nginx.conf配置文件,做了虚拟主机设置的,大家可以根据需求更改,下载即可在自己的机器上使用了,本配置文件摘录自<构建高可用Linux服务器>(机械工业出版社),转载麻烦注明出处,谢谢,配置文件如下: user  www www;worker_processes 8;error_log  /data/logs/nginx_error.log  crit;pid      

Windows 2008下 rman backup scirpts(备份脚本)--已经在生产环境下通过验证

一.任务计划 windows -控制面板-管理工具-计划任务程序,右击"任务计划程序库","创建任务" 二:相关脚本中的内容: 2.1  back_rman.bat中的内容: set ORACLE_SID=FS F:\oracle\product\10.2.0\db_1\BIN\rman target / cmdfile=H:\worksql\windows_backupscript\backup.rcv log=H:\worksql\windows_backups

生产环境下JAVA进程高CPU占用故障排查

问题描述:生产环境下的某台tomcat7服务器,在刚发布时的时候一切都很正常,在运行一段时间后就出现CPU占用很高的问题,基本上是负载一天比一天高. 问题分析:1,程序属于CPU密集型,和开发沟通过,排除此类情况.2,程序代码有问题,出现死循环,可能性极大. 问题解决:1,开发那边无法排查代码某个模块有问题,从日志上也无法分析得出.2,记得原来通过strace跟踪的方法解决了一台PHP服务器CPU占用高的问题,但是通过这种方法无效,经过google搜索,发现可以通过下面的方法进行解决,那就尝试下