Fabric是一个Python库,用于简化使用SSH的应用程序部署或系统管理任务。通过它我们可以执行本地以及服务器的shell命令,上传,下载文件,以及其他的一些功能。 对于重复性大的工作,可以通过Fabric来部署代码,实现一劳永逸。
安装Fabric
pip install fabric
或者
sudo easy_install fabric
安装完成后,可以在shell中通过命令查看是否安装成功
使用
常用命令行
命令行常用: 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中运行命令,就能看到输出了。
带参数的函数
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将会运行在db1,db2两个服务器上
@roles('db')
def migrate():
# Database stuff here.
pass
//update将会运行在web1,web2,web3服务器上
@roles('web')
def update():
# Code updates here.
pass
注解
@task 在函数顶部使用这个注解后,fab –list命令便可以看到可执行函数
@task
def migrate():
pass
@task
def push():
print('push')
@task
def provision():
pass