Fabric是一个python的远程执行shell的库,同时它也是一个命令行工具。它提供了丰富的同 SSH 交互的接口,能够用来在本地或远程机器上自动化、流水化地执行 Shell 命令。html
Fabric的官网是 www.fabfile.org,源码托管在Github上。你能够clone源码到本地,而后经过下面的命令来安装。可是在源码安装前,你必须先将Fabric的依赖包Paramiko装上。python
python setup.py develop
同时也可使用pip安装,由于fabric是python的一个第三方库,只需一条命令便可:git
pip install fabric
python3 安装时使用的是fabric3 :( 安装fabric3以前,须要先卸载fabric.)github
# fabric3 支持 python3web
pip uninstall fabricshell
pip3 install fabric3api
fabric 不仅是一个Python 模块,fabric 仍是一个命令行工具,可使用fab -h查看帮助信息 服务器
E:\my_data\hk-project>fab -V Fabric3 1.14.post1 Paramiko 2.4.2 E:\my_data\hk-project>fab -h
fabric的使用方式是经过编写一个python文件,该文件中包含多个函数,而后使用fab命令调用这些函数,作相应的任务。这些函数在fabric中称为task。app
# filename:abc.py from fabric.api import * def task1(): print("hello") def hello(): print("hello world")
写好这个python文件后,在当前目录的路径下使用fab工具执行文件中的函数函数
[root@localhost python文件所在的目录]# fab -f abc.py hello hello world # -f 指定fabfile文件,默认为fabfile.py,若文件名是当前目录下的fabfile.py则无需指定
此时你可能会想,若是这个函数有参数怎么办呢?应该如何传递参数给函数呢?Fabric 支持 Shell 兼容的参数用法: <任务名>:<参数>, <关键字参数名>=<参数值>,...
用起来就是这样。
def hello(name="world"): print("hello {}".format(name))
咱们能够这样去指定参数
$ fab hello:name=Jeff # 或者 fab hello:Jeff hello Jeff Done.
如今咱们假设须要写一个fabfile.py,可以在每次web项目代码更新后使用git提交并远程服务器拉去最新代码并运行,需求描述清楚了,开干吧!
# fabfile.py # 这里建议将该文件放入项目文件的根目录中,方便git提交 from fabric.api import local def test(): local('python manage.py test myapp') # 测试是否能正常运行 def commit(): local('git add -p && git commit -m "for test"') def push(): local('git push') def prepare_deploy(): test() commit() push()
这个 prepare_deploy
任务能够单独调用,也能够调用更细粒度的子任务。
Fabric 会检查被调用程序的返回值,若是这些程序没有干净地退出,Fabric 会终止操做。咱们什么都不用作,Fabric 检测到了错误并终止,不会继续执行 commit 任务。
咱们也能够对故障进行必定的处理和判断
from fabric.api import local, settings, abort from fabric.contrib.console import confirm def test(): with settings(warn_only=True): result = local('./manage.py test my_app', capture=True) # result.return_code返回码(0/1)和result.failed if result.failed and not confirm("Tests failed. Continue anyway?"): # confirm判断用户输入 abort("Aborting at user request.") # 指定错误退出信息 # 一个名为 warn_only 的设置(或着说 环境变量 ,一般缩写为 env var )能够把退出换为警告,以提供更灵活的错误处理。若是设置为False,则一条命令运行失败会就会退出,再也不执行后面的命令。
终于到了链接了,这个工具主要做用就是在远程执行命令呀,学会了这个,咱们就能够在本地执行远程服务器的命令了。
from fabric.api import * env.hosts = ['root@192.168.10.11:22'] def deploy(): run('ls') # run()用于执行远程命令,local()执行本地命令 # 执行后会提示你输入密码,输入密码便可
至此,入门结束,后续还有更多api的讲解,敬请关注!
参考连接:
fabric官方中文文档:https://fabric-chs.readthedocs.io/zh_CN/chs/tutorial.html
Python 远程部署利器 Fabric 模块详解:http://www.javashuo.com/article/p-zrbyyaaa-d.html