现在公司的每个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. PHP使用AJax轮询实现新订单实时提醒

    业务逻辑:Ajax每隔10秒钟请求一次接口,该接口会去查询数据库是否有新的订单,如果有则返回新订单的数量,后台收到声音提示,更改后台提醒数量 提醒框可链接到订单列表,后台更改完订单状态后会提醒会消失 ...

  2. 如何将django部署从顶级目录迁移到子目录下(NGINX UWSGI DJANGO)

    因为公司网站合并,要将我们的DJANGO项目从IP的顶级目录迁移到域名的二级目录. 以前硬编码的URL可惨了. 还涉及到upload目录,静态目录,websocket目录. 全用{% url %}问题 ...

  3. 跨集群拷贝hdfs

    拷贝 A集群的test目录到B集群的test目录 问题1: cause:java.io.IOException: Failed to run job : User root cannot submit ...

  4. 2018 JUST Programming Contest 1.0 题解

    题目链接  gym101778 Problem A 转化成绝对值之后算一下概率.这个题有点像 2018 ZOJ Monthly March Problem D ? 不过那个题要难一些~ #includ ...

  5. Python的并发并行[4] -> 并发[0] -> 利用线程池启动线程

    利用线程池启动线程 submit与map启动线程 利用两种方式分别启动线程,同时利用with上下文管理来对线程池进行控制 from concurrent.futures import ThreadPo ...

  6. hdu6035(树形DP)

    hdu6035 题意 给出一棵树,现在定义两点之间距离为两点间最短路径上颜色集合的大小.问任意两点间距离之和. 分析 换个方向,题目其实等价于求每种颜色在多少条路径上出现过(每种颜色对于答案的贡献), ...

  7. 几何【P2313】 [HNOI2005]汤姆的游戏

    顾z 你没有发现两个字里的blog都不一样嘛 qwq 题目描述--->p2313 [HNOI]汤姆的游戏 分析 说不上是分析. 数据范围给出来,这题明显暴力啊emmm. 个人认为的坑点. 这题不 ...

  8. 编码/解码和进制转化工具hURL

    编码/解码和进制转化工具hURL   在安全应用中,各种编码方式被广泛应用,如URL编码.HTML编码.BASE64等.而在数据分析时候,各种进制的转化也尤为频繁.为了方便解决这类问题,Kali Li ...

  9. (转)unity3d加密资源并缓存加载

    http://www.haogongju.net/art/1931680 首先要鄙视下unity3d的文档编写人员极度不负责任,到发帖为止依然没有更新正确的示例代码. view source   pr ...

  10. java的一些基本常识

    1.什么是java虚拟机?为什么把java称作是“无关平台的语言”? java虚拟机是一个可以执行Java字节码的虚拟进程.Java源文件被编译成能被Java虚拟机执行的字节码文件. Java 被设计 ...