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------------ ...
随机推荐
- Cookies/Session机制详解
# 转载自:https://blog.csdn.net/fangaoxin/article/details/6952954/ 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话 ...
- flask框架下的jinja2模板引擎(3)(模板继承与可以在模板使用的变量、方法)
flask 框架下的jinja2模块引擎(1):https://www.cnblogs.com/chichung/p/9774556.html flask 框架下的jinja2模块引擎(2):http ...
- Appium+python自动化6-Remote远程控制【转载】
前言 在第三篇启动app的时候有这样一行代码driver = webdriver.Remote('http://192.168.1.1:4723/wd/hub', desired_caps),很多小伙 ...
- AC日记——可能的路径 51nod 1247
可能的路径 思路: 看到题目想到gcd: 仔细一看是更相减损: 而gcd是更相减损的优化版: 所以,对于每组数据判断gcd是否相等就好: 来,上代码: #include <cstdio> ...
- RandomeAccessFile - read write
RandomeAccessFile use write replace writeBytes public class RandomAccessFileTest { public static voi ...
- lua中self.__index = self是什么意思?
example1 Account = {balance = 0} function Account:new(conf) conf = conf or {} setmetatable(conf,self ...
- Linux查看某个进程的磁盘IO读写情况
说明: 1.Linux下没有原生的查看IO的软件,只能额外装. 2.如果使用vmstat或者cat /proc/$PID/io,这些看的都太复杂了. 下面是安装的比较直观的软件: 1.iostat 这 ...
- Nand flash uboot 命令详解
转:http://blog.chinaunix.net/uid-14833587-id-76513.html nand info & nand device 显示flash的信息: DM365 ...
- andriod读写XML
AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xm ...
- CSDN日报20170413 ——《天天写业务代码的那些年,我们是怎样成长过来的》
[程序人生]天天写业务代码的那些年,我们是怎样成长过来的 作者:Phodal 比起写业务代码更不幸的是,主要工作是修 Bug , bug , buG , bUg. [Java 编程]Springboo ...