浅谈基于Fabric实现GAP集成自动部署

背景

在向服务器部署项目过程中,实施人员最大的烦劳莫过于修改过多的配置文件了。
假设你一时疏忽忘记修改或改错某些配置,还不得不手动执行停止服务、修改文件、启动服务等操作。
这个过程是一次,也可能需要重复多次。
你或许需要同时部署多台服务器,一样的操作执行多遍,你是不是会觉得又忙,又无趣,还高度紧张无比抓狂?
今天向大家介绍的Fabric,它可以让上述工作变得轻松自如,让我们心情大好。
这篇文章主要目的是讲清楚怎么用Fabric实现GAP集成自动部署,对python、shell相关知识不展开描述,
也不对Fabric所有功能进行介绍。

运行环境

系统:Ubuntu 12.04
shell:z-shell
web容器:tomcat
数据库:oracle10g

相关知识

使用Fabric需要但不限于下面的相关知识:

1.python相关知识

由于Fabric是python库,所以我们有必要先了解python的相关语法。
在学习python时,笔者参看的是《简明Python教程》,它比较适合初学python的读者。
不仅从安装、基本概念、运算符、控制流、函数、模块、数据结构、对象、输入输出、
异常、标准库等多个方面进行了介绍,而且有部分练习实例。
另一个python入门指南网址:http://www.pythontab.com/html/pythonshouce27/

感兴趣的读者还可以看看:https://wiki.python.org/moin/BeginnersGuideChinese

2.简单shell知识

需要了解sed删除、替换内容

什么是Fabric

Fabric是一个python(2.5-2.7)库和命令行工具,主要在于简化使用ssh完成应用程序部署或系统管理任务。 
简单说它的特色是执行本地脚本,就可以完成远程服务器部署。
官方文档:
http://fabric.readthedocs.org/en/1.8/tutorial.html

安装Fabric

安装Fabric前提是先装了python的相关环境,python安装可以参看《简明Python教程》。
Fabric有三种安装方式,
pip install fabric
sudo easy_install fabric
sudo apt-get install fabric
笔者采用的是最后一种。

Fabric入门

参看网址:
http://wklken.me/posts/2013/03/25/python-tool-fabric.html

http://www.pythonforbeginners.com/systems-programming/how-to-use-fabric-in-python/

Fabric接口

Fabric 在fabric.api中提供了简单而又强大的命令集合。
你可以简单的这样使用:
local  #执行本地命令
run       #以用户级别去某具体主机执行远程脚本 
sudo   #在远程服务器上sudo a command
put       #上传本地文件至远端服务器指定目录
get       #从远端服务器下载指定文件
prompt #接受用户输入并返回(同raw_input)
reboot #重启远程系统

基于Fabric实现GAP自动部署

1.想法

在部署一个项目时通常会按如下几步进行:登录服务器、停止服务、删除原项目(若有)、
部署新项目、修改相关配置文件、启动服务。基于这个想法,可以采用Fabric分步骤编写实现脚本。

2.实现

(1)引入Fabric.api
#在文件头增加
import fabric
from fabric.api import *
(2)服务器主机信息
#服务器主机IP及密码,若不写密码,执行时需输入
env.hosts = ['user@11.12.13.181']
env.password = '123456'#示例
(3)停止服务
#定义停止服务函数
def shutdown():
    run('cd ~')
    result = run('ps -ef |grep catalina.home=/home/user/app/apache-tomcat-5\.5\.14 
    |grep -v grep |awk \'{print $2    }\'')
    if result != '':
        run('kill -9 %s'%result)
#注:run('/home/user/app/apache-tomcat-5.5.14/bin/shutdown.sh')不一定能停止服务,
主要原因是shutdown.sh只会关闭startup.sh启动的线程,而无法关闭部署应用的后台线程
(4)删除原项目
#定义删除原项目函数
def rmfile():
    run('rm -rf /home/user/app/apache-tomcat-5\.5\.14/webapps/gap')
    print 'delete file successful'
(5)部署新项目
#定义复制文件及目录函数
def copyfile():
    local_directory = '~/GAP'#根据实际情况修改
    with lcd(local_directory):
        local('scp  -r gap user@11\.12\.13\.181:/home/user/app/apache-tomcat-5\.5\.14/webapps/')
#注:此处可以优化为先在本地打成tar,然后复制过去,再解压
(6)修改相关配置文件
配置文件修改清单:
- db相关
    db.xml
    
- 日志
    log4j.properties
- 缓存
    oscache.properties
- 接口权限
    applicationContext-api.xml
- Tomcat中conf/server.xml

#方法1:手工修改所有相关文件后,再copy到某个备用目录,第(5)执行后,再copy覆盖对应文件

#方法2:定义修改配置文件函数     
    #这部分内容太多,举一个修改oscache.properties实例即可
    def modifyfile():
        ......
        # modify oscache.properties
        #3.oscache.properties
           fabric.contrib.files.sed('/home/user/app/apache-tomcat-5.5.14
        /webapps/gap/WEB-INF/classes/oscache\.properties', 
                  before='cache\.path=c:\\\\\\\\myapp\\\\\\\\cache',
                        after='cache\.path=/tmp/gap/cache',
                        use_sudo=True,backup='.bak')
           print 'modify oscache.properties successful'

        ......
(7)启动服务
#定义启动服务函数
def startup():
    run('cd ~')
    run('set -m; /home/user/app/apache-tomcat-5.5.14
    /bin/startup\.sh')
#注:单独使用/home/user/app/apache-tomcat-5.5.14/bin/startup\.sh'无法启动,
需要加set -m; 才能让tomcat在后台运行。
如果使用/home/user/app/apache-tomcat-5.5.14/bin/catalina\.sh run',
则在执行脚本的当前窗口会出现后台日志,这种情况
应该也不是我们想看到的结果。

实例脚本之汇总

#定义自动部署方法
def autodeploy():
    shutdown()
    rmfile()
    copyfile()
    modifefile()
    startup()

运行方式:fab -H user@11.12.13.181 autodeploy
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值