Fabric是一个Python库,用于简化使用SSH的应用程序部署或系统管理任务。通过它我们可以执行本地以及服务器的shell命令,上传,下载文件,以及其他的一些功能。 对于重复性大的工作,可以通过Fabric来部署代码,实现一劳永逸。

安装Fabric

pip install fabric

或者

sudo easy_install fabric

安装完成后,可以在shell中通过命令查看是否安装成功

which_fab

使用

常用命令行

命令行常用: fab --help
fab -l             -- 显示可用的task(命令)
fab -H             -- 指定host,支持多host逗号分开
fab -R             -- 指定role,支持多个
fab -P             -- 并发数,默认是串行
fab -w             -- warn_only,默认是碰到异常直接abort退出
fab -f             -- 指定入口文件,fab默认入口文件是:fabfile/fabfile.py

在你需要运行的文件夹下新建一个fabfile.py文件 然后就是正常的脚本编写了 栗子:

def hi():
	print("hi girl!")

在shell中运行命令,就能看到输出了。

which_fab

带参数的函数

def hello(name, value):
    print("%s = %s!" % (name, value))

//shell中调用
fab hello:name,value    

基本命令使用

导入包函数

from fabric.api import *

lcd(dir)

执行本地的切换命令 相当于在本地执行 cd dir

lcd('/home/tmp/conf')

cd(dir)

执行远程切换命令 相当于在服务器执行cd dir

cd('/home/tmp/conf')

local(exe)

执行本地命令语句,后跟命令语句

local('ls -l | wc -l') //显示本地当前文件夹下所有文件

run(exe)

与local相对,执行服务器命令语句

run('ls -l | wc -l')

with

执行多步命令

with cd('/home/tmp')
	run('ls')

在指定的host上运行

from fabric.api import run, env

env.hosts = ['host1', 'host2']
env.passwords = {
    'host1': "pwdofhost1",
    'host2': "pwdofhost2",
}
def taskA():
    run('ls')

对多个host指派不同的任务

from fabric.api import run, roles

env.roledefs = {
    'db': ['db1', 'db2'],
    'web': ['web1', 'web2', 'web3'],
}
//migrate将会运行在db1db2两个服务器上
@roles('db')
def migrate():
    # Database stuff here.
    pass

//update将会运行在web1web2web3服务器上
@roles('web')
def update():
    # Code updates here.
    pass

注解

@task 在函数顶部使用这个注解后,fab –list命令便可以看到可执行函数

@task
def migrate():
    pass
@task
def push():
	print('push')
@task
def provision():
    pass