python三大神器之fabric使用教程


Posted in Python onJune 10, 2019

fabric 是一个python包 是一个基于ssh的部署工具包

通常用来对网站 微服务等等的批量部署 例如 我有5台线上服务器 可以通过一台对着5台分发,实现自动部署的目的。

简单介绍下 fabric的常用命令

常用命令 

lcd(dir): 进入本机某目录
local(cmd): 本机上执行命令
cd(dir): 进入服务器某目录
run(cmd):服务器上执行命令

Fabric

Fabric是一个python的远程执行shell的库,同时它也是一个命令行工具。它提供了丰富的同 SSH 交互的接口,可以用来在本地或远程机器上自动化、流水化地执行 Shell 命令。

安装Fabric

Fabric的官网是 www.fabfile.org ,源码托管在 Github 上。你可以clone源码到本地,然后通过下面的命令来安装。但是在源码安装前,你必须先将Fabric的依赖包 Paramiko 装上。

python setup.py develop

同时也可以使用pip安装,因为fabric是python的一个第三方库,只需一条命令即可:

 pip install fabric

python3 安装时使用的是fabric3 :( 安装fabric3之前,需要先卸载fabric.)

  1. # fabric3 支持 python3
  2. pip uninstall fabric
  3. pip3 install fabric3

fabric 不只是一个Python 模块,fabric 还是一个命令行工具,可以使用fab -h查看帮助信息

E:\my_data\hk-project>fab -V
Fabric3 1.14.post1
Paramiko 2.4.2
E:\my_data\hk-project>fab -h

入门使用

fabric的使用方式是通过编写一个python文件,该文件中包含多个函数,然后使用fab命令调用这些函数,做相应的任务。这些函数在fabric中称为task。

# filename:abc.py​
 from fabric.api import *​
 def task1():
   print("hello")
 def hello():
   print("hello world")

写好这个python文件后,在当前目录的路径下使用fab工具执行文件中的函数

[root@localhost python文件所在的目录]# fab -f abc.py hello
 hello world
 ​# -f 指定fabfile文件,默认为fabfile.py,若文件名是当前目录下的fabfile.py则无需指定

任务参数

此时你可能会想,如果这个函数有参数怎么办呢?应该如何传递参数给函数呢?Fabric 支持 Shell 兼容的参数用法: <任务名>:<参数>, <关键字参数名>=<参数值>,... 用起来就是这样。

def hello(name="world"):
   print("hello {}".format(name))

我们可以这样去指定参数

$ fab hello:name=Jeff  # 或者 fab hello:Jeff
 hello Jeff
 ​Done.

小试牛刀

现在我们假设需要写一个fabfile.py,能够在每次web项目代码更新后使用git提交并远程服务器拉去最新代码并运行,需求描述清楚了,开干吧!

# fabfile.py
 # 这里建议将该文件放入项目文件的根目录中,方便git提交
 from fabric.api import local
 def test():
   local('python manage.py test myapp')
   # 测试是否能正常运行
 def commit():
   local('git add -p && git commit -m "for test"')
 def push():
   local('git push')
 def prepare_deploy():
   test()
   commit()
   push()

这个 prepare_deploy 任务可以单独调用,也可以调用更细粒度的子任务。

故障

Fabric 会检查被调用程序的返回值,如果这些程序没有干净地退出,Fabric 会终止操作。我们什么都不用做,Fabric 检测到了错误并终止,不会继续执行 commit 任务。

我们也可以对故障进行一定的处理和判断

from fabric.api import local, settings, abort
 from fabric.contrib.console import confir
 def test():
   with settings(warn_only=True):
     result = local('./manage.py test my_app', capture=True) 
     # result.return_code返回码(0/1)和result.failed
   if result.failed and not confirm("Tests failed. Continue anyway?"): # confirm判断用户输入
     abort("Aborting at user request.") # 指定错误退出信息
 # 一个名为 warn_only 的设置(或着说 环境变量 ,通常缩写为 env var )可以把退出换为警告,以提供更灵活的错误处理。如果设置为False,则一条命令运行失败会就会退出,不再执行后面的命令。

建立连接

终于到了连接了,这个工具主要作用就是在远程执行命令呀,学会了这个,我们就可以在本地执行远程服务器的命令了。

from fabric.api import *
 env.hosts = ['root@192.168.10.11:22']​
 def deploy():
   run('ls') # run()用于执行远程命令,local()执行本地命令
 # 执行后会提示你输入密码,输入密码即可

至此,入门结束,后续还有更多api的讲解,敬请关注!

参考链接:

fabric官方中文文档: https://fabric-chs.readthedocs.io/zh_CN/chs/tutorial.html

总结

以上所述是小编给大家介绍的python三大神器之fabric使用教程,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python中使用Inotify监控文件实例
Feb 14 Python
Python 基础教程之包和类的用法
Feb 23 Python
git使用.gitignore设置不生效或不起作用问题的解决方法
Jun 01 Python
Python2包含中文报错的解决方法
Jul 09 Python
Sanic框架路由用法实例分析
Jul 16 Python
python画图系列之个性化显示x轴区段文字的实例
Dec 13 Python
WxPython建立批量录入框窗口
Feb 27 Python
Python两台电脑实现TCP通信的方法示例
May 06 Python
python的Jenkins接口调用方式
May 12 Python
python让函数不返回结果的方法
Jun 22 Python
基于python实现图片转字符画代码实例
Sep 04 Python
Python PIL按比例裁剪图片
May 11 Python
python判断文件夹内是否存在指定后缀文件的实例
Jun 10 #Python
Python中的十大图像处理工具(小结)
Jun 10 #Python
在python下使用tensorflow判断是否存在文件夹的实例
Jun 10 #Python
Python函数参数匹配模型通用规则keyword-only参数详解
Jun 10 #Python
python 判断文件还是文件夹的简单实例
Jun 10 #Python
python实现植物大战僵尸游戏实例代码
Jun 10 #Python
python中的协程深入理解
Jun 10 #Python
You might like
Classes and Objects in PHP5-面向对象编程 [1]
2006/10/09 PHP
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
2013/06/18 PHP
PHP上传图片进行等比缩放可增加水印功能
2014/01/13 PHP
THINKPHP项目开发中的日志记录实例分析
2014/12/01 PHP
Laravel5权限管理方法详解
2016/07/26 PHP
解决Laravel无法使用COOKIE和SESSION的问题
2019/10/16 PHP
JavaScript 学习笔记一些小技巧
2010/03/28 Javascript
最新28个很棒的jQuery 教程
2011/05/28 Javascript
浅析js中取绝对值的2种方法
2013/07/09 Javascript
一个JavaScript处理textarea中的字符成每一行实例
2014/09/22 Javascript
简单实现的JQuery文本框水印插件
2016/06/14 Javascript
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
2016/12/14 Javascript
微信小程序的动画效果详解
2017/01/18 Javascript
JavaScript中的编码和解码函数
2017/02/15 Javascript
基于vue实现分页/翻页组件paginator示例
2017/03/09 Javascript
Angular在模板驱动表单中自定义校验器的方法
2017/08/09 Javascript
react配合antd组件实现的管理系统示例代码
2018/04/24 Javascript
使用JS实现导航切换时高亮显示的示例讲解
2018/08/22 Javascript
Vue指令之 v-cloak、v-text、v-html实例详解
2019/08/08 Javascript
jQuery 函数实例分析【函数声明、函数表达式、匿名函数等】
2020/05/19 jQuery
[00:14]PWL:老朋友Mushi拍VLOG与中国玩家问好
2020/11/04 DOTA
Python中MySQL数据迁移到MongoDB脚本的方法
2016/04/28 Python
python中json格式数据输出的简单实现方法
2016/10/31 Python
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
Python 类属性与实例属性,类对象与实例对象用法分析
2019/09/20 Python
使用python绘制cdf的多种实现方法
2020/02/25 Python
python中把元组转换为namedtuple方法
2020/12/09 Python
python中@property的作用和getter setter的解释
2020/12/22 Python
AutoShack.com加拿大:北美主要的汽车零部件零售商
2019/07/24 全球购物
一些Unix笔试题和面试题
2013/01/22 面试题
店长岗位的工作内容
2013/11/12 职场文书
播音主持女孩的自我评价分享
2013/11/20 职场文书
电厂厂长岗位职责
2014/01/02 职场文书
新郎父母婚礼答谢词
2015/09/29 职场文书
常用的MongoDB查询语句的示例代码
2021/07/25 MongoDB
Win11如何设置右键单击显示所有选项?Win11右键单击显示所有选项设置教程
2022/04/08 数码科技