首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python之fabric模块

python之fabric模块

作者头像
Cyylog
发布2020-08-19 10:57:14
9340
发布2020-08-19 10:57:14
举报
文章被收录于专栏:Cyylog技术Cyylog技术

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对象)
t1Gv3F.png
t1Gv3F.png
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-05-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • python 之 fabric 模块
    • G站部署脚本 参考 示范
      • fab命令常用参数
        • fabfile全局属性 (env对象)
        相关产品与服务
        容器服务
        腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档