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学习笔记:字典的使用示例详解
Jun 13 Python
python爬虫常用的模块分析
Aug 29 Python
Python中使用pprint函数进行格式化输出的教程
Apr 07 Python
python使用socket远程连接错误处理方法
Apr 29 Python
python中模块查找的原理与方法详解
Aug 11 Python
OpenCV-Python实现轮廓检测实例分析
Jan 05 Python
Python3导入CSV文件的实例(跟Python2有些许的不同)
Jun 22 Python
Python装饰器语法糖
Jan 02 Python
python可视化爬虫界面之天气查询
Jul 03 Python
Python+opencv+pyaudio实现带声音屏幕录制
Dec 23 Python
你喜欢篮球吗?Python实现篮球游戏
Jun 11 Python
通过Python把学姐照片做成拼图游戏
Feb 15 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
php网站来路获取代码(针对搜索引擎)
2010/06/08 PHP
浅析SVN常见问题及解决方法
2013/06/21 PHP
解析php入库和出库
2013/06/25 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
利用XMLHTTP传递参数在另一页面执行并刷新本页
2006/10/26 Javascript
JavaScript中的集合及效率
2010/01/08 Javascript
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
2013/02/18 Javascript
node.js中的fs.mkdir方法使用说明
2014/12/17 Javascript
jQuery div拖拽用法实例
2016/01/14 Javascript
AngularJS 获取ng-repeat动态生成的ng-model值实例详解
2016/11/29 Javascript
jquery 判断是否支持Placeholder属性的方法
2017/02/07 Javascript
JavaScript数据结构之链表的实现
2017/03/19 Javascript
微信小程序获取手机号授权用户登录功能
2017/11/09 Javascript
Javascript中从学习bind到实现bind的过程
2018/01/05 Javascript
学习node.js 断言的使用详解
2019/03/18 Javascript
javascript实现遮罩层动态效果实例
2019/05/14 Javascript
在Vuex中Mutations修改状态操作
2020/07/24 Javascript
一个小示例告诉你Python语言的优雅之处
2014/07/04 Python
Python判断文本中消息重复次数的方法
2016/04/27 Python
详解Python Matplot中文显示完美解决方案
2019/03/07 Python
jupyter notebook 中输出pyecharts图实例
2020/04/23 Python
Django对models里的objects的使用详解
2019/08/17 Python
python requests包的request()函数中的参数-params和data的区别介绍
2020/05/05 Python
python如何实现图片压缩
2020/09/11 Python
OpenCV+python实现膨胀和腐蚀的示例
2020/12/21 Python
Python实现对word文档添加密码去除密码的示例代码
2020/12/29 Python
matplotlib之pyplot模块之标题(title()和suptitle())
2021/02/22 Python
复古斯堪的纳维亚儿童服装:Baby go Retro
2017/09/09 全球购物
车辆工程专业求职信
2014/04/28 职场文书
2014最新预备党员思想汇报范文:中国梦,我的梦
2014/10/25 职场文书
抄袭同学作业检讨书1000字
2014/11/20 职场文书
中小学生安全教育观后感
2015/06/17 职场文书
世界各国短波电台对东亚播送时间频率表(SW)
2021/06/28 无线电
纯html+css实现奥运五环的示例代码
2021/08/02 HTML / CSS
Win10防火墙白名单怎么设置?Win10添加防火墙白名单方法
2022/04/06 数码科技
vue实现省市区联动 element-china-area-data插件
2022/04/22 Vue.js