fabric自动发布tomcat线上项目
现在公司的每个tomcat项目都有测试和生产两个环境,对于经常需要上线的tomcat项目,如用手工更新就非常耗费时间和人力。现用fabric开发了一个自动发布tomcat项目的脚本,该脚本已经在公司使用的非常稳定。
fabric自动发布脚本流程如下:

#!/usr/bin/python
#coding=utf-8
from fabric.api import *
from fabric.colors import *
from fabric.context_managers import *
from fabric.contrib.console import confirm
env.user='root'
env.hosts=['192.168.1.10']
env.password=''
env.svn_user='userabd'
env.svn_password=''
env.svn_url='svn://192.168.1.20/source/java/project'
env.svn_local_path='/data/svn/'
env.remote_path='/data/company/project/'
@task
def package_project():
print yellow('开始打包文件')
with lcd(env.svn_local_path):
local("svn co %s --username=%s --password=%s" %(env.svn_url,env.svn_user,env.svn_password))
with lcd("%s'project'" %(env.svn_local_path)):
local("mvn clean package -Dmaven.test.skip=true -Ptest -U")
with lcd("%s'project/target'" %(env.svn_local_path)):
result=local('ls |grep project.*war$',capture=True)
print yellow('打包文件成功')
print yellow('打包文件为:%s' %(result))
@task
def put_package():
print yellow('开始上传文件')
with lcd("%s'project/target'" %(env.svn_local_path)):
result=local('ls |grep project.*war$',capture=True)
env.local_war_path=env.svn_local_path + 'project/target/' + result
with cd("env.remote_path"):
put(env.local_war_path,env.remote_path) @task
def check_task():
with lcd("%s'project/target'" %(env.svn_local_path)):
result=local('ls |grep project.*war$',capture=True)
env.local_war_path=env.svn_local_path + 'project/target/' + result
env.remote_war_path=env.remote_path + result
lmd5=local("md5sum %s" %(env.local_war_path),capture=True ).split(' ')[0]
rmd5=run("md5sum %s" %(env.remote_war_path)).split(' ')[0]
if lmd5 == rmd5:
print green('上传文件成功')
else:
print red('上传文件失败') @task
def unpack_project():
print yellow('开始解压war包')
with lcd("%s'project/target'" %(env.svn_local_path)):
result=local('ls |grep project.*war$',capture=True)
with cd(env.remote_path):
run("find . ! -name '*war' -a ! -name .|xargs rm -rf")
run("unzip %s" %(result)) @task
def switch_production():
print yellow('开始切换生产环境配置文件')
with cd(env.remote_path):
run('sed -i s/test/production/g WEB-INF/classes/applicationContext.xml') @task
def restart_tomcat():
print yellow('重启Tomcat进程')
run('/usr/local/tomcat/bin/shutdown.sh')
run('sleep 10')
run('/usr/local/tomcat/bin/startup.sh') @task
def production():
package_project()
put_package()
check_task()
unpack_project()
switch_production()
restart_tomcat()
脚本使用方法:fab -f name.py production
fabric自动发布tomcat线上项目的更多相关文章
- [解决]UserLibrary中的jar包不会自动发布Tomcat的lib目录下(基于MyEclipse2014)
1.在工程名称上单击[右键] —— 单击[Properties]选项,点击后会弹出属性窗口: 2.选择[Properties]后在左侧树中找到[MyEclipse] —— [Deployment As ...
- eclipse项目自动发布到tomcat目录,缺文件。
eclipse项目自动发布到tomcat目录,缺文件. 解决方案: 项目--Properties-->Deployment Assembly-->Add--> Folder Add- ...
- Tomcat 设置自动编译,自动发布,自动部署
Tomcat服务器 具有一个常用的功能: 即自动编译,自动发布,自动部署功能. 问题: 当我们第一次发布程序以后,我们增删改Servelt,Java,.xml等文件,都必须重启Tomcat,如果项目巨 ...
- CentOS7下Docker中构建可以自动发布到项目的Tomcat容器
步骤 下载镜像 搜索相应的镜像文件:docker search 'tomcat' 如下 下载镜像:docker pull tomcat:7,如下图 PS:后面的数字代表tomcat的版本,可以自己选择 ...
- Jenkins+tomcat自动发布的热部署/重启及遇到的坑解决办法
一.背景 公司的项目一直手动maven打包.上传服务器.关闭/开启tomcat,整个流程下来耗时耗力,虽然可以将所有流程通过shell脚本一次性解决,但如果可以通过idea的Jenkins插件一键自动 ...
- Eclipse取消或者关闭tomcat所有自动发布(部署)方法
1.设置publishing为Never publish automaticallu 2.modules->edit->auto reloading enabled 3.Windows & ...
- Jenkins自动部署Tomcat项目
Jenkins自动部署Tomcat项目 1.安装jenkins 插件 启动Jenkins,进入系统管理-插件管理: 选择Deploy to container Plugin 插件安装:
- Shell脚本,自动化发布tomcat项目【转载】
Shell脚本,自动化发布tomcat项目脚本. 1. vko2c_auto_build_by_scp.sh 文件内容: #---------------------start------------ ...
- Shell脚本,自动化发布tomcat项目【转】
Shell脚本,自动化发布tomcat项目脚本. 1. vko2c_auto_build_by_scp.sh 文件内容: #---------------------start------------ ...
随机推荐
- [BZOJ1854][SCOI2010]游戏 二分图最大匹
1854: [Scoi2010]游戏 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 5316 Solved: 2128[Submit][Status] ...
- JavaScript 开发者的 10 款必备工具
JavaScript,一种所有主流浏览器都支持的语言,是开发基于浏览器的 Web 应用程序的主力,几乎每年都会受到来自众多开发人员的关注.自然地,框架和库的生态系统自然而然地围绕着 JavaScrip ...
- 计蒜客 28437.Big brother said the calculation-线段树+二分-当前第k个位置的数 ( ACM训练联盟周赛 M)
M. Big brother said the calculation 通过线段树维护. 这个题和杭电的一道题几乎就是一样的题目.HDU5649.DZY Loves Sorting 题意就是一个n的排 ...
- (8)C#字符串
一.字符串 为什么说string是一个不可变的字符序列. string a="me"; a="meeeee"; string b="me" ...
- Python与数据库[2] -> 关系对象映射/ORM[0] -> ORM 与 sqlalchemy 模块
ORM 与 sqlalchemy 1 关于ORM / About ORM 1.1 ORM定义 / Definition of ORM ORM(Object Relational Mapping),即对 ...
- LCA【p4281】[AHOI2008]紧急集合 / 聚会
Description 欢乐岛上有个非常好玩的游戏,叫做"紧急集合".在岛上分散有N个等待点,有N-1条道路连接着它们,每一条道路都连接某两个等待点,且通过这些道路可以走遍所有的等 ...
- HDU 4251 The Famous ICPC Team Again(划分树)
The Famous ICPC Team Again Time Limit: 30000/15000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- 初步接触LVS
今天整理下思绪,定下要掌握LVS原理和使用方法.于是,看了部分关于LVS的概述和文章. 章博士在2002年写的LVS的几篇文章,在我看来,今天都值得一看.http://www.linuxvirtual ...
- 分享最新申请IDP账号的过程,包含duns申请的分享(2013年6月)
5月份接到公司要申请开发者账号的任务,就一直在各个论坛找申请的流程,但都是一些09年10年的比较旧的流程,现在都已经不适用了,好不容易找到2012年分享的流程吧,才发现申请过程中少了DUNS编码的步骤 ...
- apache mod_speling.so 忽略URL大小写(自动纠错)
apache mod_speling.so 忽略URL大小写(自动纠错) 打开配置文件 httpd.conf 加入 LoadModule speling_module modules/mod_spe ...