Python之——生产环境代码包发布管理
2018-01-12 12:48
337 查看
程序生产环境的发布是业务上线最后一个环境,要求具备源码打包、发布、切换、回滚、版本管理等功能,本实例实现了一整套流程,其中版本切换与回滚使用了Linux的软链接来实现。具体代码如下:
# -*- coding:UTF-8 -*-
'''
Created on 2018年1月12日
@author: liuyazhuang
'''
from fabric.api import *
from fabric.colors import *
from fabric.context_managers import *
from fabric.contrib.console import confirm
import time
env.user = 'root'
env.hosts = ['192.168.209.121', '192.168.209.122']
env.password = '密码'
#开发机项目主目录
env.project_dev_source = '/data/dev/source/'
#开发机项目压缩包存储目录
env.project_tar_source = "/data/dev/releases/"
#项目压缩包前缀,文件名为release.tar.gz
env.project_pack_name='release'
#项目生产环境主目录
env.deploy_project_root = "/data/application/"
#项目发布目录,位于主目录下面
env.deploy_release_dir = 'releases'
#对外服务的当前版本软链接
env.deploy_current_dir = 'current'
#版本号
env.deploy_version=time.strftime("%Y%m%d") + "v2"
@runs_once
def input_versionid(): #获得用户输入的版本号,以便做版本回滚操作
return prompt("please input project rollback version ID:", default="")
@task
@runs_once
def tar_source(): #打包本地项目主目录,并将压缩包存储到本地压缩包目录
print yellow("Creating source package...")
with lcd(env.project_dev_source):
local("tar -czf %s.tar.gz." %(env.project_tar_source + env.project_pack_name))
print green("Creating source package success!")
@task
def put_package(): #上传任务函数
#开始打印
print yellow("Start put package...")
with settings(warn_only = True):
with cd(env.deploy_project_root + env.deploy_release_dir):
#创建版本目录
run("mkdir %s" % (env.deploy_version))
env.deplog_full_path = env.deploy_project_root + env.deploy_release_dir + "/" + env.deploy_version
#上传项目压缩包至此目录
with settings(warn_only = True):
result = put(env.project_tar_source + env.project_pack_name + ".tar.gz", env.deplog_full_path)
if result.failed and not("put file failed, Continue[Y/N]?"):
abort("Aborting file put task!")
#成功解压后删除压缩包
with cd(env.deplog_full_path):
run("tar -zxvf %s.tar.gz" % (env.project_pack_name))
run("rm -rf %s.tar.gz" % (env.project_pack_name))
print green("put & untar package success!")
@task
def make_symlink(): #为当前版本目录做链接
print yellow("update current symlink")
env.deploy_full_path = env.deploy_project_root + env.deploy_release_dir + "/" + env.deploy_version
#删除软链接,重新创建并制定软链接源目录,新版本生效
with settings(warn_only = True):
run("rm -rf %s" % (env.deploy_project_root + env.deploy_current_dir))
run("ln -s %s %s" % (env.deploy_full_path, env.deploy_project_root + env.deploy_current_dir))
print green("make symlink success!")
@task
def rollback(): #版本回滚任务函数
print yellow("rollback project version")
#获得用户输入的回滚版本号
versionid = input_versionid()
if versionid == '':
abort("Please version ID error, abort!")
env.deploy_full_path = env.deploy_project_root + env.deploy_release_dir + "/" + versionid
#删除软链接,重新创建并制定软链接目录,新版本生效
run("rm -f %s" % env.deploy_project_root + env.deploy_current_dir)
run("ln -s %s %s" % (env.deploy_full_path, env.deploy_project_root + env.deploy_current_dir))
print green("rollback success!")
@task
def go(): #自动化程序版本发布入口函数
tar_source()
put_package()
make_symlink()本实例实现了一个通用性很强的代码发布管理功能,支持快速部署与回滚,无论发布还是回滚,都可以通过切换current软链接来实现,非常灵活。由于使用了Linux的软链接做切换,我们的版本发布、回滚操作用户无感知,同时也规范了我们业务上线的流程。
# -*- coding:UTF-8 -*-
'''
Created on 2018年1月12日
@author: liuyazhuang
'''
from fabric.api import *
from fabric.colors import *
from fabric.context_managers import *
from fabric.contrib.console import confirm
import time
env.user = 'root'
env.hosts = ['192.168.209.121', '192.168.209.122']
env.password = '密码'
#开发机项目主目录
env.project_dev_source = '/data/dev/source/'
#开发机项目压缩包存储目录
env.project_tar_source = "/data/dev/releases/"
#项目压缩包前缀,文件名为release.tar.gz
env.project_pack_name='release'
#项目生产环境主目录
env.deploy_project_root = "/data/application/"
#项目发布目录,位于主目录下面
env.deploy_release_dir = 'releases'
#对外服务的当前版本软链接
env.deploy_current_dir = 'current'
#版本号
env.deploy_version=time.strftime("%Y%m%d") + "v2"
@runs_once
def input_versionid(): #获得用户输入的版本号,以便做版本回滚操作
return prompt("please input project rollback version ID:", default="")
@task
@runs_once
def tar_source(): #打包本地项目主目录,并将压缩包存储到本地压缩包目录
print yellow("Creating source package...")
with lcd(env.project_dev_source):
local("tar -czf %s.tar.gz." %(env.project_tar_source + env.project_pack_name))
print green("Creating source package success!")
@task
def put_package(): #上传任务函数
#开始打印
print yellow("Start put package...")
with settings(warn_only = True):
with cd(env.deploy_project_root + env.deploy_release_dir):
#创建版本目录
run("mkdir %s" % (env.deploy_version))
env.deplog_full_path = env.deploy_project_root + env.deploy_release_dir + "/" + env.deploy_version
#上传项目压缩包至此目录
with settings(warn_only = True):
result = put(env.project_tar_source + env.project_pack_name + ".tar.gz", env.deplog_full_path)
if result.failed and not("put file failed, Continue[Y/N]?"):
abort("Aborting file put task!")
#成功解压后删除压缩包
with cd(env.deplog_full_path):
run("tar -zxvf %s.tar.gz" % (env.project_pack_name))
run("rm -rf %s.tar.gz" % (env.project_pack_name))
print green("put & untar package success!")
@task
def make_symlink(): #为当前版本目录做链接
print yellow("update current symlink")
env.deploy_full_path = env.deploy_project_root + env.deploy_release_dir + "/" + env.deploy_version
#删除软链接,重新创建并制定软链接源目录,新版本生效
with settings(warn_only = True):
run("rm -rf %s" % (env.deploy_project_root + env.deploy_current_dir))
run("ln -s %s %s" % (env.deploy_full_path, env.deploy_project_root + env.deploy_current_dir))
print green("make symlink success!")
@task
def rollback(): #版本回滚任务函数
print yellow("rollback project version")
#获得用户输入的回滚版本号
versionid = input_versionid()
if versionid == '':
abort("Please version ID error, abort!")
env.deploy_full_path = env.deploy_project_root + env.deploy_release_dir + "/" + versionid
#删除软链接,重新创建并制定软链接目录,新版本生效
run("rm -f %s" % env.deploy_project_root + env.deploy_current_dir)
run("ln -s %s %s" % (env.deploy_full_path, env.deploy_project_root + env.deploy_current_dir))
print green("rollback success!")
@task
def go(): #自动化程序版本发布入口函数
tar_source()
put_package()
make_symlink()本实例实现了一个通用性很强的代码发布管理功能,支持快速部署与回滚,无论发布还是回滚,都可以通过切换current软链接来实现,非常灵活。由于使用了Linux的软链接做切换,我们的版本发布、回滚操作用户无感知,同时也规范了我们业务上线的流程。
相关文章推荐
- python fabric模块 生产环境dubbo包全自动发布管理完整实例
- 生产环境部署python代码(django+uwsgi+nginx)
- 使用git服务器实现生产环境应用服务器代码更新管理的方案
- 使用pycharm手动搭建python语言django开发环境 - 使用git管理代码(二)
- Python代码的构建与发布(Windows环境)
- 手游公司运维之利用Rundeck自动化运维工具和Shell脚本构建测试环境代码发布平台和生产环境代码发布平台
- 使用Git管理代码的版本及发布
- Kubernetes用户指南(三)--在生产环境中使用Pod来工作、管理部署
- maven项目开发环境搭建之五使用SVN管理代码
- PYTHON编程环境管理的必备利器——ANACONDA
- 第四百零一节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署virtualenv虚拟环境安装,与Python虚拟环境批量安装模块
- python2.7下发布web service(一):环境搭建
- Python linux多版本共存以及虚拟环境管理
- PEP8管理Python代码风格
- 用virtualenv管理python3运行环境
- VUE 利用webpack 给生产环境和发布环境配置不同的接口地址
- 一步步学习SPD2010--第十三章节--管理SP Server环境的Web内容(1)--创建一个发布网站
- 写文章 使用conda管理python环境
- Rails的静态资源管理(四)—— 生产环境的 Asset Pipeline
- git管理代码个人总结(Mac不用配置环境变量的,Windows需要配置环境变量)