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 confirm

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 模块详解:https://blog.csdn.net/freeking101/article/details/81103945

python三大神器之fabric的更多相关文章

  1. python三大神器之fabric(2.0新特性)

    fabric经常出现在自动化运维领域,批量处理一些运维工作.fabric是在paramiko之上又封装了一层,操作起来更加简单易用. 本来只是想写个博客记录一下,然后发现之前写的代码不能运行了,报以下 ...

  2. python三大神器之virtualenv pip, virtualenv, fabric通称为pythoner的三大神器。

    python三大神器之virtualenv   pip, virtualenv, fabric通称为pythoner的三大神器. virtualenv virtualenv------用来建立一个虚拟 ...

  3. python三大神器之virtualenv

    virtualenv virtualenv用来管理python项目环境,隔离出一个只属于这个项目的虚拟python环境(windows和Linux用法一样). 首先你需要安装virtualenv模块 ...

  4. python三大神器之pip

    pip是一款管理python各类包和库的工具,非常好用.下文介绍常用的一些命令. ● 安装:pip install 库名 也可以指定版本:pip install 库名=版本 ● 卸载:pip unin ...

  5. python神器之fabric

    官网:http://www.fabfile.org/ 中文站点:http://fabric-chs.readthedocs.io/zh_CN/chs/ Fabirc是基于python实现的SSH命令行 ...

  6. python三大神器之一fabric使用

    fabric 是一个python包 是一个基于ssh的部署工具包 通常用来对网站 微服务等等的批量部署 例如 我有5台线上服务器 可以通过一台对着5台分发,实现自动部署的目的. 简单介绍下 fabri ...

  7. 不知道怎么向女神表白?Python三大神技分分钟带你成功逆袭!

    一行python的表白 首先祭出绝招,用1行python表白: print(' '.join([''.join([('I LOVE U'[(x-y) % 8] if ( (x*0.05)**2 + ( ...

  8. shell编程三大神器之awk

  9. shell编程三大神器之grep

随机推荐

  1. (Java实现) 洛谷 P1781 宇宙总统

    题目背景 宇宙总统竞选 题目描述 地球历公元6036年,全宇宙准备竞选一个最贤能的人当总统,共有n个非凡拔尖的人竞选总统,现在票数已经统计完毕,请你算出谁能够当上总统. 输入输出格式 输入格式: pr ...

  2. Java实现 LeetCode 239 滑动窗口最大值

    239. 滑动窗口最大值 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧.你只可以看到在滑动窗口内的 k 个数字.滑动窗口每次只向右移动一位. 返回滑动窗口中的最 ...

  3. Java实现 蓝桥杯VIP 算法提高 数的划分

    算法提高 数的划分 时间限制:1.0s 内存限制:256.0MB 问题描述 一个正整数可以划分为多个正整数的和,比如n=3时: 3:1+2:1+1+1: 共有三种划分方法. 给出一个正整数,问有多少种 ...

  4. java实现平面点最小距离

    已知平面上若干个点的坐标. 需要求出在所有的组合中,4个点间平均距离的最小值(四舍五入,保留2位小数). 比如有4个点:a,b,c,d, 则平均距离是指:ab, ac, ad, bc, bd, cd ...

  5. Tomcat 配置必备的 10 个小技巧

    现在开发Java Web应用,建立和部署Web内容是一件很简单的工作.使用Jakarta Tomcat作为Servlet和JSP容器的人已经遍及全世界.Tomcat具有免费.跨平台等诸多特性,并且更新 ...

  6. 容器技术之Dockerfile(三)

    前面我们聊到了dockerfile的 FROM.COPY .ADD.LABAL.MAINTAINER.ENV.ARG.WORKDIR.VOLUME.EXPOSE.RUN.CMD.ENTRYPOINT指 ...

  7. Grafana 插件地图Worldmap不显示

    介绍 最近上了ELK 日志分析,想着手看下用户的分布情况,在kibana 中展示用户分布情况是没有问题的,但是索引添加到Granfana 中的话就无法展示. 问题描述 添加ES索引以后,map地图一片 ...

  8. jQuery实现拖拽元素

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. 0.大话Spring Cloud

    天天说Spring cloud ,那到底它是什么? 定义 它不是云计算解决方案 它是一种微服务开发框架 它是(快速构建分布式系统的通用模式的)工具集 它基于Spring boot 构建开发 它是云原生 ...

  10. 在SpringMVC获取客户端传递的数据的方式

    在处理请求的方法中,加入相对应的形参,保证形参参数名和传递的数据的参数名保持一致,就能够自动赋值 value:当不满足赋值条件时,可以使用value属性,指定映射关系 required:设置形参是否必 ...