Fabric官方文档的描述如下:
Fabric is a Python (2.5-2.7) library and command-line tool for streamlining the use of SSH for application deployment or systems administration tasks.
具体来说,Fabric是一个Python库,只要目标机器支持ssh访问,就可以借助fabric来进行远程操作(如在host1上对host2远程运行shell命令),显然,由于fabric是个Python package,故其它Python package都可以被import到fabric特有的fabfile.py脚本中,这使得fabric如虎添翼,在功能的丰富程度和运维脚本的可维护性上,远远超过用shell实现的自动化部署脚本,更不要说与纯手工敲命令的上线方式相比所体现出的巨大优势了。
在系统运维和部署自动化领域,与fabric类似的工具还有很多(如Puppet, Chef),感兴趣的话,可以参考这篇文章48 Best Cloud Tools for Infrastructure Automation的介绍。
Fabric支持的常用命令列出如下:
1)local
Run a command on the local system.
它是对subprocess模块的封装(Shell=True),可以通过设置Capture = True/False来捕获其执行结果。
2)run
Run a shell command on a remote host.
该命令的返回值包含了远程命令是否执行成功以及远程命令的返回码等信息。通过run执行命令时,通常会要求输入目标机器密码,如果对多台机器进行部署,可以通过设置env.passwords来避免手动输入密码,具体的设置方法会在下篇笔记中介绍。
3)get
Download one or more files from a remote host.
4)put
Upload one or more files to a remote host.
5)sudo
Run a shell command on a remote host, with superuser privileges.
功能与run操作类似,它可以对当前用户临时提权来执行某些需要root权限的命令。
根据fabric的约定,当运行例如”fab deploy”这样的命令时,fab会默认搜索名为fabfile.py的python文件或名为fabfile的package,故基于fabric的部署脚本通常以fabfile.py命名且应该位于当期工作目录下以便于fab进行搜索,在该文件中实现我们想要的任务即可。当然,如果要实现的部署任务比较复杂,这些任务也可以写在多个脚本中,统一置于fabric package下。关于fabfile的细节,可以参考官方文档Fabfile construction and use,这里不赘述。
3.2 定义task