本文基于 Python3 和 fabric2,记录关于 fabric 自动化部署项目的基本语法。
fabric 不同版本间的区别
在 pypi 中搜索 fabric 能搜到三个相关的库:

- Fabric 和 fabric2:
同为官方版,虽然名字不同,但可以看到,两者版本号完全相同,这两个现在就是同一个东西。除了安装出来的库名分别为 fabric 和 fabric2,用法完全一样。
- Fabric3:
由于原来 fabric 是不支持 Python3 的,这个 Fabric3 项目是别人 fork 出来加了 Python3 支持的。
最新版的 fabric 已经支持了 Python3,这个项目也基本不再维护了。
新版 fabric 相对老版本的 fabric,已经完全重写了,接口有了很大的改动,且已支持 Python3. 所以无论你现在使用的是老版本的 fabric ,亦或是非官方不再维护的 Fabric3,建议升级到最新版的 fabric.
安装 fabric
1
2
|
pip install fabric
pip install fabric2
|
使用 pip 安装 fabric,以上两个命令均可,安装出来的库名不同,不过用法相同。
代码示例
这里以简单部署博客代码为例,介绍 fabric 的基本用法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 旧版本 fabric 限制了文件名为 fabfile.py,在新版本中已经不限制文件名。
from fabric import Connection
def main():
# 创建连接,这里也可以使用 host+password 的方式,不过既不安全也不方便。
# 配置了 SSH 免密登录后,就不用指定 ip 和密码了。
c = Connection("bjjdkp@blog")
# cd 目录跳转,确保每个命令执行的目录,否则会跳转到用户主目录
with c.cd('/your_project_path'):
# run 执行命令
c.run("git pull")
c.run("~/.virtualenvs/py3/bin/pip install -r ../requirements.txt")
c.run("~/.virtualenvs/py3/bin/python manage.py collectstatic --noinput")
c.run("~/.virtualenvs/py3/bin/python manage.py makemigrations")
c.run("~/.virtualenvs/py3/bin/python manage.py migrate")
c.run("supervisorctl restart gunicorn_blog")
|
更多用法请参考官方文档。