python fabric模块 生产环境dubbo代码包发布管理完整实例

#!/usr/bin/env python

import os

import time

import fabric

from fabric.api import *

from fabric.context_managers import *

from fabric.colors import *

from fabric.contrib.console import confirm

env.hosts=[‘XXXX.XXXX.XXXX.XXXX‘]

env.user=‘user‘

env.password=‘xxxxxxxx‘

env.port=‘22‘

env.remote_deploy_dir="/app/dubbo/server"

env.remote_backup_dir="/data/backup/java"

env.remote_upload_dir="/home/www/upload"

env.local_dir="/app/webapps/torch/dubbo"

env.local_upload_dir="/home/www/upload"

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

env.por_name=prompt("please input your project name:")

@task

def backup_remote():

env.por_name = prompt("please input your project name:")

print red("start backup remote project" + "env.pro_name")

rem = run("cd %s/%s" % (env.remote_deploy_dir,env.por_name))

if rem.failed and not confirm("cd deployfailed,continue?"):

abort(‘Abort‘)

#with settings(warn_only = True):

with cd("%s/%s" % (env.remote_deploy_dir,env.por_name)):

run("tar -czvf %s%s.tar.gz lib" % (env.por_name,env.deploy_date))

time.sleep(5)

run("mv *.tar.gz %s"  % (env.remote_backup_dir))

print green("backup remote project success!")

@task

def tar_source():

print red("start tar source package......")

with lcd("%s/%s" % (env.local_dir,env.por_name)):

local("tar -xvf %s-assembly.tar.gz" % (env.por_name))

time.sleep(5)

with lcd("%s/%s/%s" % (env.local_dir,env.por_name,env.por_name)):

local("tar -czvf  %s.tar.gz  lib" % (env.por_name))

time.sleep(5)

local("mv %s.tar.gz %s" % (env.por_name,env.local_upload_dir))

print green("tar source packge success!")

@task

def put_packge():

print red ("start put packge......")

with settings(warn_only = True):

result = put(env.local_upload_dir +"/"+ env.por_name +".tar.gz",env.remote_upload_dir)

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

abort("Abort file put task!")

local("rm -rf %s/%s.tar.gz" %(env.local_upload_dir,env.por_name))

@task

def check_packge():

print red ("start check packge......")

with settings(warn_only = True):

lmd5 = local("md5sum %s/%s.tar.gz" % (env.local_upload_dir,env.por_name), capture=True).split(‘ ‘)[0]

print ("lmd5 is %s" %(lmd5))

rmd5 = run("md5sum %s/%s.tar.gz" % (env.remote_upload_dir, env.por_name)).split(‘ ‘)[0]

print ("rmd5 is %s" %(rmd5))

if lmd5 == rmd5:

local("rm -rf %s/%s.tar.gz " %(env.local_upload_dir,env.por_name))

print "OK"

else:

print "ERROR"

run("rm -rf %s/%s.tar.gz" %(env.remote_upload_dir, env.por_name))

print yellow("put packge failed......")

@task

def deploy_packge():

print red("start deploy packge ......")

#with settings(warn_only = True):

#run("mv %s/%s.tar.gz %s/%s" %(env.remote_upload_dir,env.por_name,env.remote_deploy_dir,env.por_name))

#with cd(‘%s/%s‘ % (env.remote_deploy_dir,env.por_name)):

#run("./bin/stop.sh")

#time.sleep(5)

with settings(warn_only = True):

env.remote_pro_pid = run("ps -ef |grep %s |grep -v grep |awk ‘{print $2}‘|tail -1" % (env.por_name))

#project stop, start project

if len(env.remote_pro_pid)==0:

print red("env.por_name is stop,start deploy packge......")

run("mv %s/%s.tar.gz %s/%s" %(env.remote_upload_dir,env.por_name,env.remote_deploy_dir,env.por_name))

with cd(‘%s/%s‘ % (env.remote_deploy_dir,env.por_name)):

run("rm -rf lib && tar -xvf %s.tar.gz" %(env.por_name))

time.sleep(3)

run("./bin/start.sh")

time.sleep(5)

env.remote_pro_pid = run("ps -ef |grep %s |grep -v grep |awk ‘{print $2}‘|tail -1" % (env.por_name))

if len(env.remote_pro_pid)!=0:

print green("%s packge deploy is sucessfull..." %(env.por_name))

run("rm -rf %s/%s/%s.tar.gz" %(env.remote_deploy_dir,env.por_name,env.por_name))

else:

print yellow("%s packge deploy faild" %(env.por_name))

run("rm -rf %s/%s/%s.tar.gz" %(env.remote_deploy_dir,env.por_name,env.por_name))

#project start,stop project and start project

else:

with settings(warn_only = True):

with cd(‘%s/%s‘ % (env.remote_deploy_dir,env.por_name)):

run("./bin/stop.sh")

time.sleep(5)

env.remote_pro_pid = run("ps -ef |grep %s |grep -v grep |awk ‘{print $2}‘|tail -1" % (env.por_name))

if len(env.remote_pro_pid)==0:

print("env.por_name is stop,start deploy packge......")

run("mv %s/%s.tar.gz %s/%s" %(env.remote_upload_dir,env.por_name,env.remote_deploy_dir,env.por_name))

with cd(‘%s/%s‘ % (env.remote_deploy_dir,env.por_name)):

run("rm -rf lib && tar -xvf %s.tar.gz" %(env.por_name))

time.sleep(3)

run("./bin/start.sh")

time.sleep(5)

env.remote_pro_pid = run("ps -ef |grep %s |grep -v grep |awk ‘{print $2}‘|tail -1" % (env.por_name))

if len(env.remote_pro_pid)!=0:

print green("%s packge deploy is sucessfull..." %(env.por_name))

run("rm -rf %s/%s/%s.tar.gz" %(env.remote_deploy_dir,env.por_name,env.por_name))

else:

print yellow("%s packge deploy faild" %(env.por_name))

run("rm -rf %s/%s/%s.tar.gz" %(env.remote_deploy_dir,env.por_name,env.por_name))

else:

run("kill -9 %d" % int(env.remote_pro_pid))

print("env.por_name is stop,start deploy packge......")

run("mv %s/%s.tar.gz %s/%s" % (env.remote_upload_dir, env.por_name, env.remote_deploy_dir, env.por_name))

time.sleep(5)

with cd(‘%s/%s‘ % (env.remote_deploy_dir, env.por_name)):

run("rm -rf lib && tar -xvf %s.tar.gz" % (env.por_name))

run("./bin/start.sh")

time.sleep(5)

env.remote_pro_pid = run("ps -ef |grep %s |grep -v grep |awk ‘{print $2}‘|tail -1" % (env.por_name))

if len(env.remote_pro_pid) != 0:

print green("%s packge deploy sucessfull...."%(env.por_name))

run("rm -rf %s/%s/%s.tar.gz" %(env.remote_deploy_dir,env.por_name,env.por_name))

else:

print yellow("%s packge deploy faild" % (env.por_name))

run("rm -rf %s/%s/%s.tar.gz" %(env.remote_deploy_dir,env.por_name,env.por_name))

@task

def go():

backup_remote()

tar_source()

put_packge()

check_packge()

deploy_packge()

时间: 2024-10-06 21:33:29

python fabric模块 生产环境dubbo代码包发布管理完整实例的相关文章

gRPC Python 入门到生产环境

所有的代码在 https://github.com/xsren/learning_record/tree/master/grpc,欢迎star. 一.先了解几个概念 RPC RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议. gRPC gRPC是一个高性能.通用的开源RPC框架,其由Google主要由开发并基于HTTP/2协议标准而设计,基于ProtoBuf(Protocol Buffers)序列化协议

生产环境nginx代码报错500

2015年11月23日晚搭建完BRS系统(上传图片系统)后,测试机器功能发现无法图片无法上传到服务器上,查看nginx日志后发现日志nginx状态码返回500(内部服务器错误), 1.开始认为是nginx权限导致,把upload目录改为777,但是依然无效,后思考下如果是权限问题不应该返回500,而是403之类的状态码,后开始进行下一步排查: 2.后利用google的调试功能进行排查,后发现貌似数据库报错,插入不了数据,有的字段未显示但还不能为空,所以插入不进去数字,原因在于数据库配置问题,后把

virgo-tomcat-server的生产环境线上配置与管理

Virgo Tomcat Server简称VTS,VTS是一个应用服务器,它是轻量级, 模块化, 基于OSGi系统.与OSGi紧密结合并且可以开发bundles形式的Spring web apps应用 他们同样拥有OSGi和Spring的特性.VTS由SpringSource 的Spring DM server过渡而来, virgo官网地址:http://www.eclipse.org/virgo Virgo Tomcat Server的心脏是Virgo Kernel简称VK. VK基于OSGi

Python Fabric 模块 介绍及简单应用

来源:<Python自动化运维> Fabric的安装 Fabric支持pip.easy_install或源码安装方式,很方便解决包依赖的问题,具体安装命令如下( 根据用户环境,自行选择pip或easy_install): pip install fabric easy_install fabric Fabric依赖第三方的setuptools.Crypto.paramiko包的支持,源码 安装步骤如下: # yum -y install python-setuptools # wget htt

python fabric模块入门

Fabric 是一个 Python (2.5-2.7) 库和命令行工具,用来流水线化执行 SSH 以部署应用或系统管理任务. 安装: pip install fabric 首先来一个入门通用demo,hello world. 文件:hello_world.py # coding: utf-8 def hello(): print 'Hello world!' 运行结果: 默认查找当前目录下fabfile.py文件,若文件名非fabfile.py,则需要使用-f指定文件. $ fab -f hel

tomcat-7生产环境部署war包

一.准备工作 首先连接机房的VPN,机房配置的有vsftp服务器,把war包上传到vsftp服务器,然后登陆vsftp 服务器,下载时记得指定为binary(二进制格式) 1.下载软件包 apache-tomcat-7.0.68.tar.gz jdk-8u73-linux-x64.gz 2.把软件包放在/usr/local下 # mv jdk-8u73-linux-x64.gz apache-tomcat-7.0.68.tar.gz /opt/ # cd /opt/ # tar -xf jdk-

用git部署网站代码到生产环境VPS

做web开发时,以前都是写好了一个新功能要发布到服务器上都是使用FTP上传覆盖原来的代码,这样做很麻烦,首先要打开FTP程序,然后进入指定文件夹,然后上传,而且用FTP上传经常容易出错总是有个别文件会因为权限或者各种奇葩的原因上传失败......用git来部署就不会有这样的问题. 如果你的项目是一个团队在做,可能还需要一个公共仓库如Github或者GitCafe,git.oschina.net,git.csdn.net等,使用他们也可以部署到远程的服务器.方法是,设置GitHub等的hook(国

.Net Core Linux centos7行—发布程序到生产环境

实验demo现在需要发布到生产环境,发现在发布的时候要考虑到不一致的几个地方. 1.各类配置文件线下,线上不一致. 2.绑定的url不一致,可能是域名不一致,也可能是schema不一致(http,https) ? ? 配置文件的不一致问题,可以使用环境配置来解决.系统默认定义了3个:Development, Staging, Production appsettings.json 开发:appsettings.Development.json 线上:appsettings.Production.

ASP.NET Core 发布至Linux生产环境 Ubuntu 系统

ASP.NET Core 发布至Linux生产环境 Ubuntu 系统,之前跟大家讲解了 dotnet publish 发布,而没有将整个系统串起来. 今天就跟大家综合的讲一下ASP.NET Core发布至Linux生产环境. 开发及发布环境:WIN10 x64  生产Linux环境:Ubuntu 14.04 发布的示例代码: https://github.com/linezero/NETCoreBBS 代码下载下来,首先请注释 Program.cs 中 .UseUrls("http://*:8