Fabric 远端 批量部署

公司有二十多台服务器,每次到了版本发布的时候,非常辛苦,一台台去拷贝可执行程序,然后一台台改配置,之后一台台检测校验程序的正确性,最后一台台启动上线,这是一件非常繁琐和枯燥的事情。对于一两台机器这个工作量倒没什么,但是如果批量到了几十台的基础上,对于部署人员是一个不小的挑战,要保证重复操作20次不错,其实是一件很难的事情。那么批量远端部署成了一件有必要去完成的事情。这就引入了fabric工具。这个工具最大的好处是基于ssh以及python做的开发,对于远端linux机器,不需要装任何客户端可以直接兼容,基本上支持ssh的机器都可以进行远端控制。当然,任何东西不会完美,他也有一些问题,正是因为是基于ssh的处理,所以他的效率并不是很高,并不适合大批量的机器多端部署,体量应该在100台之内没啥问题。

下面简单介绍一下Fabric以及其入门

一.依赖库安装:

主机作为Fabric的使用端是基于Python的,官方要求版本2.7以上,我是使用2.7.5,亲自测试过好用,但是在一台2.7.3机器上出现了python的一个库不存在,我并没有去深究,应该是版本的问题。可以通过python -V来查看自己的python版本。如果报错的,那就是python,我们先安装python。如果出现问题的需要安装python,yum install python。

由于fabric源码是在git库上的,我们还需要安装一个git。检测git是否安装成功git –version,这里对git的版本没有要求,只需要可以安全下载代码即可。

二.下载源码:

两个依赖库安装好之后,就可以下载源码了,源码路径在https://github.com/fabric/fabric

git clone https://github.com/fabric/fabric.git

我们会看到git下载下来的fabric目录,进入这个目录,通过python这个命令执行setup脚本。$python setup.py develop

或者可以yum install fabric也可以用来执行安装(yum安装会默认给你安装好Paramiko)

完成上面几步之后,我们基本上是安装好了。如何是否安装成功,执行这个命令fab -V。如果出现版本就说明安装OK了。否则得退回去一步步查到底哪里出现了问题。

安装OK那么接下来就开始实际操作

三.使用:

什么东西都从hello world开始。我们创建一个python文件。这个文件名有一定的要求,默认必须要fabfile.py。否则会出现找不到fabfile.py的提示。这个文件主要执行在本地完成shell命令,简单代码如下

fromfabric.api import local

defhello():

    local('ls-l /home/bjhee/')

如何执行,直接可以

fab hello

这个命令很简单,fab是默认打开fabfile.py文件,执行hello任务。如果想后面带入参数也可以,例如

fromfabric.api import local

defhello(name1, name2):

print"%s and %s say Hello Fabric!" % (name1, name2)

看到现在为止,肯定有人有疑惑,这样的意义是什么,关键是如何在远端执行脚本,因为多机部署的关键还是远端控制

远端并再使用适用刚刚提到的fabric.api的local库,而是使用fabric.api的run这个库,并且在这个文件前,要定义我需要远端的机器名,如果之前配置好代理跳转,并且首次成功跳转的条件下,可以直接ssh过去,而不需要输入用户名密码。否则需要输入用户名密码,整体语法如下(我这里加入了密码身份验证信息,以便密码用户可以直接使用):

fromfabric.api import run, env//使用fabric.api的run库和env库

env.hosts= ['10.10.10.10', '10.10.10.11']//指定服务器的列表,可以是域名,也可以是ip

env.user= 'userecho'//身份验证的用户名

env.password= 'hock'//身份验证的密码

defhello():

run('ls -l /home/userecho/')//run表示在远端执行ls -l 等命令

在我们多台机器条件下,很多使用环境是不一样的,比如要在某一些主机上执行A行文,而在另外一些主机上执行B行为。这样,就需要定义不同的机器,他们的分组。实现如下

fromfabric.api import env, roles, run, execute, cd//需要用到多个fabric.api 的多个库

env.roledefs= {

    'staging':['[email protected]','[email protected]'],//定义stageing的分组

    'build': ['[email protected]']//定义build的分组

}

env.passwords= {

    'staging': '11111',//stageing的分组密码

    'build': '123456'//build的分组密码

}

@roles('build')//指定build分组用户的build行为

defbuild():

    with cd('/home/build/myapp/'):

        run('git pull')

        run('python setup.py')

@roles('staging')//定义staging分组用户的deploy的行为

defdeploy():

    run('tar xfz /tmp/myapp.tar.gz')

    run('cp /tmp/myapp /home/bjhee/www/')

deftask():

    execute(build)

execute(deploy)

有了这几个利器基本上可以完成绝大多数需求,我使用的应用场景,就是,先到一台打包机make,生产可执行文件,然后将文件拷贝到各个目的端服务器,进行版本的对应,然后执行程序。

你可能感兴趣的:(Fabric 远端 批量部署)