现在公司的每个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线上项目的更多相关文章

  1. [解决]UserLibrary中的jar包不会自动发布Tomcat的lib目录下(基于MyEclipse2014)

    1.在工程名称上单击[右键] —— 单击[Properties]选项,点击后会弹出属性窗口: 2.选择[Properties]后在左侧树中找到[MyEclipse] —— [Deployment As ...

  2. eclipse项目自动发布到tomcat目录,缺文件。

    eclipse项目自动发布到tomcat目录,缺文件. 解决方案: 项目--Properties-->Deployment Assembly-->Add--> Folder Add- ...

  3. Tomcat 设置自动编译,自动发布,自动部署

    Tomcat服务器 具有一个常用的功能: 即自动编译,自动发布,自动部署功能. 问题: 当我们第一次发布程序以后,我们增删改Servelt,Java,.xml等文件,都必须重启Tomcat,如果项目巨 ...

  4. CentOS7下Docker中构建可以自动发布到项目的Tomcat容器

    步骤 下载镜像 搜索相应的镜像文件:docker search 'tomcat' 如下 下载镜像:docker pull tomcat:7,如下图 PS:后面的数字代表tomcat的版本,可以自己选择 ...

  5. Jenkins+tomcat自动发布的热部署/重启及遇到的坑解决办法

    一.背景 公司的项目一直手动maven打包.上传服务器.关闭/开启tomcat,整个流程下来耗时耗力,虽然可以将所有流程通过shell脚本一次性解决,但如果可以通过idea的Jenkins插件一键自动 ...

  6. Eclipse取消或者关闭tomcat所有自动发布(部署)方法

    1.设置publishing为Never publish automaticallu 2.modules->edit->auto reloading enabled 3.Windows & ...

  7. Jenkins自动部署Tomcat项目

    Jenkins自动部署Tomcat项目 1.安装jenkins 插件 启动Jenkins,进入系统管理-插件管理: 选择Deploy to container Plugin 插件安装:

  8. Shell脚本,自动化发布tomcat项目【转载】

    Shell脚本,自动化发布tomcat项目脚本. 1. vko2c_auto_build_by_scp.sh 文件内容: #---------------------start------------ ...

  9. Shell脚本,自动化发布tomcat项目【转】

    Shell脚本,自动化发布tomcat项目脚本. 1. vko2c_auto_build_by_scp.sh 文件内容: #---------------------start------------ ...

随机推荐

  1. hdu 4081(次小生成树)

    Qin Shi Huang's National Road System Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/3 ...

  2. springBoot Ribbon 负载均衡

    1.依赖引用 <!-- 引入关于 eureka-server的依赖 --> <dependency> <groupId>org.springframework.cl ...

  3. SQL 并发-转

    脏读.不可重复读  共享锁.悲观锁 和 事务五种隔离级别   一.脏读.不可重复读.幻读1.脏读:脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个 ...

  4. POJ 2828.Buy Tickets-完全版线段树(单点更新、逆序遍历查询)

    POJ2828.Buy Tickets 这个题是插队问题,每次有人插队的时候,其后的所有数据都要进行更新,如果我们反着推,就可以把所有的数据都安排好并且不用再对已插入的数据进行更新,因为逆序处理的话所 ...

  5. HDU 6113 度度熊的01世界【DFS/Flood Fill】

    度度熊的01世界 Accepts: 967 Submissions: 3064 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3 ...

  6. UVA 1395 Slim Span 最小生成树

    题意: 给你一个图,让你求这个图中所有生成树中满足题目条件的,这个条件是生成树中最长边与最短边的差值最小. 思路: 根据最小瓶颈生成树的定义:在一个有权值的无向图中,求一个生成树最大边的权值尽量小.首 ...

  7. POJ 1741 Tree 树的分治

    原题链接:http://poj.org/problem?id=1741 题意: 给你棵树,询问有多少点对,使得这条路径上的权值和小于K 题解: 就..大约就是树的分治 代码: #include< ...

  8. Requirement Analysis

    BRD:Business Requirements Document,商业需求文档.这是产品声明周期中最早的问的文档,再早就应该是脑中的构思了,其内容涉及市场分析,销售策略,盈利预测等,通常是和老大们 ...

  9. mysql语法语句

    将一个字段中的timestamp修改成可视化时间 update table set f1 = IF( LOCATE('-',f1)>0, f1, IFNULL(FROM_UNIXTIME(f1/ ...

  10. Uprobes: userspace probes >= Linux 3.5

    https://lwn.net/Articles/499190/ https://github.com/andreoli/fulltrace Prominent features in Linux 3 ...