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------------ ...
随机推荐
- 多线程之:java线程创建
java中创建线程有两种方式: 1.继承Thread类,重写run()方法,如: public class MyThread extends Thread { public void run(){ S ...
- .NET APlayer播放器 demo
工作需要,想开发一款播放器,当无意间浏览到APlayer的时候大爱啊,有木有迅速投入精力,在APlayer论坛看大牛们的作品及经验,看SDK中提供的chm电子书最后看了博客园中周见智的文章(灰常好!最 ...
- oracle 批量改temp/data/redo file的路径
批量生成修改路径的脚本.select 'alter database rename file ''' || name ||'''' || ' to '''|| substr(name,0,instr( ...
- 51nod 1413 权势二进制【进制思维】
1413 权势二进制 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 一个十进制整数被叫做权势二进制,当他的十进制 ...
- Buffer源码深入分析
博客园对MarkDown显示的层次感不是很好,大家可以看这里:Buffeer. 本机环境: Linux 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:33 ...
- FZU-2219 StarCraft(贪心)
Problem 2219 StarCraft Accept: 294 Submit: 860Time Limit: 1000 mSec Memory Limit : 32768 KB ...
- codevs——1553 互斥的数
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 有这样的一个集合,集合中的元素个数由给定的N决定,集合的元素为N个不同 ...
- 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 ...
- linux命令和工具
环境搭建 lnmp环境搭建 命令 uname -a 查看linux版本 lsof -i:80 查看端口被那个程序占用 lsof -p pid号 查看引用的文件 netstat -apn|grep 80 ...
- JSP(待更新)
1.概念: 所谓JSP就是在HTML中嵌入大量的java代码而已.