Python之——生产环境代码包发布管理fabirc
程序生产环境的发布是业务上线最后一个环境,要求具备源码打包、发布、切换、回滚、版本管理等功能,本实例实现了一整套流程,其中版本切换与回滚使用了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之——生产环境代码包发布管理fabirc的更多相关文章
- fabric生产环境代码包发布管理
- 基于node的前端项目代码包发布至nexus
目录 目录... 3 1. 前言... 1 2. 配置... 1 2.1. 配置angular.json文件... 1 2.2. 配置package.json文件... 1 2.3. 复制git地址. ...
- Anaconda 科学计算环境与包的管理
相信大多数 python 的初学者们都曾为开发环境问题折腾了很久,包管理和 python 不同版本的问题,特别是 window 环境安装个 scrapy 各种报错 ,使用 Anaconda 可以很好的 ...
- .NET C#微信公众号开发远程断点调试(本地远程调试生产环境代码)
最近在做微信公众号开发,由于之前没有接触过,突然发现调试不方便,不方便进行断点跟踪调试.因为微信那边绑定的服务器地址必须是公网地址,但是还是想进行断点调试(毕竟这样太方便了,程序有Bug,一步步断点跟 ...
- git管理测试生产环境代码
利用post-update实现简单钩子 #!/bin/bash cd /www/test || exit #进入指定的目录 unset GIT_DIR #清楚环境变量 git checkout mas ...
- Linux_CentOS下搭建Nodejs 生产环境-以及nodejs进程管理器pm2的使用
nodejs安装:https://www.cnblogs.com/loaderman/p/11596661.html nodejs 进程管理器 pm2 的使用 PM2 是一款非常优秀的 Node 进程 ...
- 利用ansible-playbook从测试环境获取tomcat中java项目新版本发布到生产环境
一.环境描述 安装有ansible的服务器:192.168.13.45 测试环境服务器:192.168.13.49 /home/app/api-tomcat/webapps/api.war为测试环境新 ...
- (17/24) webpack实战技巧:生产环境和开发环境并行设置,实现来回切换
1. 概述 生产环境和开发环境所需依赖是不同: --开发依赖:就是开发中用到而发布时用不到的.在package.json里面对应的就是devDependencies下面相关配置. --生产依赖: 就是 ...
- Python 一键安装全部依赖包
使用 pip requirements.txt 用来记录项目所有的依赖包和版本号,只需要一个简单的 pip 命令就能完成. pip freeze > requirements.txt 生成的文件 ...
随机推荐
- 前端_CSS
目录 CSS语法 CSS的四种引入方式 CSS选择器 CSS属性操作 补充 示例(一些小模板) CSS语法 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明. 1 2 3 4 5 6 7 ...
- 《Spring1之第六次站立会议》
<第六次站立会议> 昨天:向小伙伴们请教了我代码的错误的解决方法以及对TCP/IP协议进行了相关的了解. 今天:我把自己项目工程里的服务器端界面进行了优化和完善. 遇到的问题:觉得做的界面 ...
- Scapy之ARP询问
引言 校园网中,有同学遭受永恒之蓝攻击,但是被杀毒软件查下,并知道了攻击者的ip也是校园网.所以我想看一下,这个ip是PC,还是路由器. 在ip视角,路由器和pc没什么差别. 实现 首先是构造arp报 ...
- 一、SpringBoot热部署
一.热部署优点: 1.无论本地还是线上都适用 2.无需重启服务器 (1)提高开发.调试效率 (2)提升发布.运维效率.降低运维成本 二.和热加载的区别
- NTP同步网络时间
为什么要同步网络时间呢,这是由于树莓派没有RTC和后备电池,不能像PC机那样关机之后仍可以走时. NTP对时步骤: 1 安装ntpdate sudo apt-get install ntpdate s ...
- 在虚拟机中安装Ubuntu详细过程
参考:http://blog.csdn.net/u013142781/article/details/50529030
- form表单转化json对象
利用 $.fn 可以让每一个jquery 对象都能直接使用这个方法. //form表单转化json对象$.fn.serializeObject = function () { var o = {}; ...
- PAT 1054 求平均值
https://pintia.cn/problem-sets/994805260223102976/problems/994805272659214336 本题的基本要求非常简单:给定N个实数,计算它 ...
- python调用Sikuliapi
Sikuli是由MIT(麻省理工学院) 研究团队发布的一种图形化编程技术(编程小白的福音),使用Sikuli你只需要会写HelloWorld这种最基本的编程技能即可,用Sikuli不需要去写出一行行复 ...
- [51CTO]给您介绍Windows10各大版本之间区别
给您介绍Windows10各大版本之间区别 随着win10的不断普及和推广,越来越多的朋友想安装win10系统了,但是很多朋友不知道win10哪个版本好用,为了让大家能够更好的选择win10系统版本, ...