python之fabric模块

时间:2022-07-23
本文章向大家介绍python之fabric模块,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

python 之 fabric 模块

Fabric 是一个用 Python 开发的部署工具,最大特点是不用登录远程服务器,在本地运行远程命令,几行 Python 脚本就可以轻松部署。

# doc http://docs.fabfile.org/en/2.5/getting-started.html
# pip install fabric -i http://mirrors.aliyun.com/pypi/simple/
G站部署脚本 参考 示范
from fabric import Connection, task
from fabric.api import env,hosts,run,execute

@task
def deploy(c):
    with Connection('root@x.x.x.x') as c:
        c.run("rm -rf giligili")
        c.run("git clone https://github.com/bydmm/giligili.git", pty=True)
        c.put("docker-compose.yml", "giligili/docker-compose.yml")
        c.run("cd giligili && docker-compose build && docker-compose rm -fsv && docker-compose up --build -d", pty=True)
        c.run("sleep 15 && docker logs -f gili-api")

# doc http://docs.fabfile.org/en/2.5/getting-started.html
# apt install python-pip
# pip install fabric -i http://mirrors.aliyun.com/pypi/simple/
# fab deploy

以上定义了pack和deploy两个任务,如果我们用Fabric部署,只需简单地输入两条命令:

$ fab pack
$ fab deploy

Fabric提供几个简单的API来完成所有的部署,最常用的是local()和run(),分别在本地和远程执行命令,put()可以把本地文件上传到远程,当需要在远程指定当前目录时,只需用with cd(‘/path/to/dir/‘):即可。

默认情况下,当命令执行失败时,Fabric会停止执行后续命令。有时,我们允许忽略失败的命令继续执行,比如run(‘rm /tmp/abc’)在文件不存在的时候有可能失败,这时可以用with settings(warn_only=True):执行命令,这样Fabric只会打出警告信息而不会中断执行。

Fabric是如何在远程执行命令的呢?其实Fabric所有操作都是基于SSH执行的,必要时它会提示输入口令,所以非常安全。更好的办法是在指定的部署服务器上用证书配置无密码的ssh连接。

如果是基于团队开发,可以让Fabric利用版本库自动检出代码,自动执行测试、打包、部署的任务。由于Fabric运行的命令都是基本的Linux命令,所以根本不需要用Fabric本身来扩展,会敲Linux命令就能用Fabric部署。

利用Fabric部署Python、Ruby、PHP这样的非编译型网站应用非常方便,而对于编译型的Java、C#等就麻烦了,编译本身就是一个极其复杂的大工程,需要依赖特定工具或者IDE,很难做到自动化。

fab命令常用参数

# fab --help   查看帮助
 
## 常用参数
-l 显示定义好的任务函数名
-f 指定fab入口文件,默认入口文件名为fabfile.py.. 即指定fabfile文件
-g 指定网关(中转)设备,即HOST逗号分隔要操作的主机, 比如堡垒机环境,填写堡垒机IP即可.
-H 指定目标主机,多台主机用‘,’号分隔
-p 远程账号的密码,fab执行时默认使用root账户
-P 以异步并行方式运行多主机任务,默认为串行运行
-R 指定role(角色),以角色名区分不同业务组设备
-t 设置设备连接超时时间(秒)
-T 设置远程主机命令执行超时时间(秒)
-w 当命令执行失败,发出警告,而非默认中止任务。
其他参数:
--set=KEY=VALUE,...   逗号分隔,设置环境变量
--shortlist       简短打印可用命令
-c PATH         指定本地配置文件
-D           不加载用户known_hosts文件
-i PATH         指定私钥文件
-k           不加载来自~/.``ssh``下的私钥文件
--port=PORT       指定SSH连接端口
-R ROLES        根据角色操作,逗号分隔
-s SHELL        指定新shell,默认是``'/bin/bash -l -c'
--show=LEVELS      以逗号分隔的输出
--ssh-config-path=PATH SSH配置文件路径
-T N          设置远程命令超时时间,单位秒
-u USER         连接远程主机用户名
-x HOSTS        以逗号分隔排除主机
-z INT         并发进程数

fabfile全局属性 (env对象)