本文基于 Python3 和 fabric2,记录关于 fabric 自动化部署项目的基本语法。

fabric 不同版本间的区别

pypi 中搜索 fabric 能搜到三个相关的库:

  • Fabric 和 fabric2:
    同为官方版,虽然名字不同,但可以看到,两者版本号完全相同,这两个现在就是同一个东西。除了安装出来的库名分别为 fabricfabric2,用法完全一样。
  • 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")

更多用法请参考官方文档