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

  fabric自动发布脚本流程如下:

  

  1. #!/usr/bin/python
  2. #coding=utf-8
  3. from fabric.api import *
  4. from fabric.colors import *
  5. from fabric.context_managers import *
  6. from fabric.contrib.console import confirm
  7. env.user='root'
  8. env.hosts=['192.168.1.10']
  9. env.password=''
  10. env.svn_user='userabd'
  11. env.svn_password=''
  12. env.svn_url='svn://192.168.1.20/source/java/project'
  13. env.svn_local_path='/data/svn/'
  14. env.remote_path='/data/company/project/'
  15. @task
  16. def package_project():
  17. print yellow('开始打包文件')
  18. with lcd(env.svn_local_path):
  19. local("svn co %s --username=%s --password=%s" %(env.svn_url,env.svn_user,env.svn_password))
  20. with lcd("%s'project'" %(env.svn_local_path)):
  21. local("mvn clean package -Dmaven.test.skip=true -Ptest -U")
  22. with lcd("%s'project/target'" %(env.svn_local_path)):
  23. result=local('ls |grep project.*war$',capture=True)
  24. print yellow('打包文件成功')
  25. print yellow('打包文件为:%s' %(result))
  26. @task
  27. def put_package():
  28. print yellow('开始上传文件')
  29. with lcd("%s'project/target'" %(env.svn_local_path)):
  30. result=local('ls |grep project.*war$',capture=True)
  31. env.local_war_path=env.svn_local_path + 'project/target/' + result
  32. with cd("env.remote_path"):
  33. put(env.local_war_path,env.remote_path)
  34.  
  35. @task
  36. def check_task():
  37. with lcd("%s'project/target'" %(env.svn_local_path)):
  38. result=local('ls |grep project.*war$',capture=True)
  39. env.local_war_path=env.svn_local_path + 'project/target/' + result
  40. env.remote_war_path=env.remote_path + result
  41. lmd5=local("md5sum %s" %(env.local_war_path),capture=True ).split(' ')[0]
  42. rmd5=run("md5sum %s" %(env.remote_war_path)).split(' ')[0]
  43. if lmd5 == rmd5:
  44. print green('上传文件成功')
  45. else:
  46. print red('上传文件失败')
  47.  
  48. @task
  49. def unpack_project():
  50. print yellow('开始解压war包')
  51. with lcd("%s'project/target'" %(env.svn_local_path)):
  52. result=local('ls |grep project.*war$',capture=True)
  53. with cd(env.remote_path):
  54. run("find . ! -name '*war' -a ! -name .|xargs rm -rf")
  55. run("unzip %s" %(result))
  56.  
  57. @task
  58. def switch_production():
  59. print yellow('开始切换生产环境配置文件')
  60. with cd(env.remote_path):
  61. run('sed -i s/test/production/g WEB-INF/classes/applicationContext.xml')
  62.  
  63. @task
  64. def restart_tomcat():
  65. print yellow('重启Tomcat进程')
  66. run('/usr/local/tomcat/bin/shutdown.sh')
  67. run('sleep 10')
  68. run('/usr/local/tomcat/bin/startup.sh')
  69.  
  70. @task
  71. def production():
  72. package_project()
  73. put_package()
  74. check_task()
  75. unpack_project()
  76. switch_production()
  77. 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. 多线程之:java线程创建

    java中创建线程有两种方式: 1.继承Thread类,重写run()方法,如: public class MyThread extends Thread { public void run(){ S ...

  2. .NET APlayer播放器 demo

    工作需要,想开发一款播放器,当无意间浏览到APlayer的时候大爱啊,有木有迅速投入精力,在APlayer论坛看大牛们的作品及经验,看SDK中提供的chm电子书最后看了博客园中周见智的文章(灰常好!最 ...

  3. oracle 批量改temp/data/redo file的路径

    批量生成修改路径的脚本.select 'alter database rename file ''' || name ||'''' || ' to '''|| substr(name,0,instr( ...

  4. 51nod 1413 权势二进制【进制思维】

    1413 权势二进制 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题  收藏  关注 一个十进制整数被叫做权势二进制,当他的十进制 ...

  5. Buffer源码深入分析

    博客园对MarkDown显示的层次感不是很好,大家可以看这里:Buffeer. 本机环境: Linux 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:33 ...

  6. FZU-2219 StarCraft(贪心)

     Problem 2219 StarCraft Accept: 294    Submit: 860Time Limit: 1000 mSec    Memory Limit : 32768 KB   ...

  7. codevs——1553 互斥的数

    时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解     题目描述 Description 有这样的一个集合,集合中的元素个数由给定的N决定,集合的元素为N个不同 ...

  8. Guess Number Higher or Lower -- LeetCode

    We are playing the Guess Game. The game is as follows: I pick a number from 1 to n. You have to gues ...

  9. linux命令和工具

    环境搭建 lnmp环境搭建 命令 uname -a 查看linux版本 lsof -i:80 查看端口被那个程序占用 lsof -p pid号 查看引用的文件 netstat -apn|grep 80 ...

  10. JSP(待更新)

    1.概念: 所谓JSP就是在HTML中嵌入大量的java代码而已.