Fabric是一个Python(2.5-2.7)库,用于简化使用SSH的应用程序部署或系统管理任务。

它提供的操作包括:执行本地或远程shell命令,上传/下载文件,以及其他辅助功能,如提示用户输入、中止执行等。

本文主要介绍CentOS 6.3上使用Fabric进行自动化部署的基本方法。

1. 环境部署

本节主要介绍python版本升级,pip及fabric安装方法。

1.1 Python版本升级

CentOS 6.3自带的Python版本为2.6,首先需要升级到2.7版本。由于旧版本的Python已被深度依赖,所以不能卸载原有的Python,只能全新安装。

1. 下载Python,选择Gzipped source tarball,下载地址:https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tgz

2. 解压安装,命令如下

$ tar -xvf Python-2.7.14.tgz
$ cd Python-2.7.14
$ ./configure --prefix=/usr/local/python2.7
$ make
$ make install

3. 创建链接来使系统默认python变为python2.7

$ ln -fs /usr/local/python2.7/bin/python2.7 /usr/bin/python

4. 查看Python版本

$ python –V

5. 修改yum配置(否则yum无法正常运行)

$ vi /usr/bin/yum

将第一行的#!/usr/bin/python修改为系统原有的python版本地址#!/usr/bin/python2.6

至此CentOS 6.3系统Python已成功升级至最新2.7.14版本。

1.2 安装pip

Pip是一个安装和管理python包的工具。

安装方法如下:

1. 下载pip,地址:https://raw.github.com/pypa/pip/master/contrib/get-pip.py

2. 执行安装命令

$ python get-pip.py

3. 创建连接(否则会报错提示“命令不存在”)

$ ln -s /usr/local/python2.7/bin/pip /usr/bin/pip

1.3 安装fabric

1. 执行安装命令

$ pip install fabric

2. 创建连接(否则会报错提示“命令不存在”)

$ ln -s /usr/local/python2.7/bin/fab /usr/bin/fab

2. Fabric脚本编写

本节对fabric用法进行简单介绍,并提供实例以供参考。

2.1 Hello,fab

1. 在当前目录下新建文件fabfile.py,输入内容如下:

def hello():
print("Hello fab!")

2. 执行命令fab hello,结果如下:

$ fab hello

Hello fab!

3. 文件名不为fabfile.py时需使用-f进行指定:

$ mv fabfile.py test.py

$ fab hello

Fatal error: Couldn't find any fabfiles!

Remember that -f can be used to specify fabfile path, and use -h for help.

$ fab -f test.py hello

Hello fab!

4. 参数传递

使用vi fabfile.py,修改fabfile.py:

def hello(name):
print 'Hello %s!'%name

可以通过如下两种方式进行参数传递:

$ fab hello:name=fab

Hello fab!

$ fab hello:fab

Hello fab!

2.2 本地操作

执行本地操作命令使用local

1. fabfile.py脚本内容如下

from fabric.api import local

def test():
local('cd /home/')
local('ls -l|wc -l')

2. 执行命令fab test,结果如下

$ fab test

[localhost] local: cd /home/

[localhost] local: ls -l|wc -l

8

2.3 远程操作

执行远程操作命令使用run

1. fabfile.py脚本内容如下

from fabric.api import cd,run,env,hosts

env.hosts=['192.168.85.99:22','192.168.85.101:22']
env.password='test' def test():
with cd('/home'):
run("du -sh")

2. 执行命令fab test,结果如下

$ fab test

[192.168.85.99:22] Executing task 'test'

[192.168.85.99:22] run: du -sh

[192.168.85.99:22] out: 392G .

[192.168.85.99:22] out:

[192.168.85.101:22] Executing task 'test'

[192.168.85.101:22] run: du -sh

[192.168.85.101:22] out: 5.6G .

[192.168.85.101:22] out:

Disconnecting from 192.168.85.99... done.

Disconnecting from 192.168.85.101... done.

3. 多服务器混合,需要在不同服务器进行不同操作时,可参考如下脚本

from fabric.api import env,roles,run,execute

env.roledefs = {'server1': ['root@192.168.85.99:22',],'server2': ['root@192.168.85.100:22', ]}
env.password = 'test' @roles('server1')
def task1():
run('ls /home/ -l | wc -l') @roles('server2')
def task2():
run('du -sh /home') def test():
execute(task1)
execute(task2)

结果如下:

$ fab test

[root@192.168.85.99:22] Executing task 'task1'

[root@192.168.85.99:22] run: ls /home/ -l | wc -l

[root@192.168.85.99:22] out: 27

[root@192.168.85.99:22] out:

[root@192.168.85.100:22] Executing task 'task2'

[root@192.168.85.100:22] run: du -sh /home

[root@192.168.85.100:22] out: 1.4G /home

[root@192.168.85.100:22] out:

Disconnecting from 192.168.85.99... done.

Disconnecting from 192.168.85.100... done.

3. 参考

上面只是对Python+Fabric自动部署脚本编写方法的简单介绍,在实际应用过程中根据具体需求编写相应的脚本时可以参考如下文章:

1. http://docs.fabfile.org/en/latest/index.html

2. http://wklken.me/posts/2013/03/25/python-tool-fabric.html

Python Fabric远程自动部署简介的更多相关文章

  1. 使用Publish Over SSH插件实现远程自动部署

    背景: 现场的部署环境开放外网环境困难,只有一台机器能够开发外网,应对该情况,所有的补丁文件需要直接在master机器上面生成,然后命令移动到其他的服务器上面去. 这里使用到了jenkins的Publ ...

  2. python fabric远程操作和部署

    博客迁往:新地址(点击直达) 新博客使用markdown维护,线下有版本号库,自己写的所以会定时更新同步.同一时候提供更好的导航和阅读体验 csdn对markdown支持不好.所以旧版不会花时间进行同 ...

  3. 最新JetBrainsPyCharm自动部署Python(Django,tornado等)项目至远程服务器

    每次开发Python项目时,对于所有Python开发人员来说,最枯燥的不是修改代码,而是实时将自己的代码上传至远程服务器,进行测试或者部署,本人最初开发也是这样,通过使用Xshell 5,WinSCP ...

  4. 持续集成之Jenkins自动部署war包到远程服务器

    一.无war包链接的情况 无war包链接时,需先下载war包到本地,然后执行: ---------------------------------------------以下部分为转载-------- ...

  5. IntelliJ IDEA自动部署项目至远程服务器与传统部署项目至远程服务器的区别

    每次开发Java项目时,对于所有Java开发人员来说,最枯燥的不是修改代码,而是实时将自己的代码上传至远程服务器,进行测试或者部署,本人最初开发也是这样,通过使用Xshell 5,WinSCP等工具对 ...

  6. maven自动部署到远程tomcat教程

    使用maven的自动部署功能可以很方便的将maven工程自动部署到远程tomcat服务器,节省了大量时间. 本文章适用于tomcat的7.x ,8.x, 9.x版本. 下面是自动部的步骤 1,首先,配 ...

  7. nginx tomcat 自动部署python脚本【转】

    #!/usr/bin/env python #--coding:utf8-- import sys,subprocess,os,datetime,paramiko,re local_path='/ho ...

  8. Hexo快速搭建静态博客并实现远程VPS自动部署

    这篇文章将如何搭建hexo,以及如何通过git webhooks实现远程vps的自动部署 这篇文件适合的条件: 简单的用于个人博客.公司博客展示,hexo的定位是静态博客,要实现动态服务器的功能并不适 ...

  9. IDEA自动部署WEB工程至远程服务器(学习笔记)

    一.部署Web工程的几种方式 ①本地打war,上传至远程服务器tomcat容器即可 优点:简单粗暴 缺点:浪费时间 ②IDEA自动部署至远程服务器 优点:节省大量时间 缺点:配置稍多(第一次) 二.I ...

随机推荐

  1. Struts2第六篇【文件上传和下载】

    前言 在讲解开山篇的时候就已经说了,Struts2框架封装了文件上传的功能--..本博文主要讲解怎么使用Struts框架来完成文件上传和下载 回顾以前的文件上传 首先,我们先来回顾一下以前,我们在we ...

  2. sourcetree和gitlab配置图解

    一.前期准备安装 1.git客户端(1.产生gitlab服务端和本地git相互传输时所需要校验的私钥和公钥    2.直接在Idea中使用git提交和push代码,当然也可以用sourcetree提交 ...

  3. Java面试准备

    今天我们会分为四个部分来谈论这个问题,由于我本身是Java出身,因此关于主语言的问题,都是与Java相关,其它语言的同学可以选择性忽略.此外,面试的时候一般面试官的问题都是环环相扣,逐渐深入的,这点在 ...

  4. SDP开发

    1.1 前言 在企业间的商业竞争越来越激烈的今天,如何快速实现客户需求,如果快速方开发.修改.更新系统功能,如何降低软件研发的成本等等,在此目标基础上研发了软件快速开发(SDP)工具.通过平台设计器快 ...

  5. JAVA多线程--Thinking in java

    聊聊并发:http://ifeve.com/java-concurrency-thread-directory/ 阻塞状态: sleep  可中断利用 interrupt方法 wait IO  不可中 ...

  6. Tree--RedBlackTree详解(2 - 3 - 4Tree)(红黑树)

    #topics h2 { background: #2B6695; color: #FFFFFF; font-family: "微软雅黑", "宋体", &qu ...

  7. Quartz学习——Spring和Quartz集成详解(三)

    Spring是一个很优秀的框架,它无缝的集成了Quartz,简单方便的让企业级应用更好的使用Quartz进行任务的调度.下面就对Spring集成Quartz进行简单的介绍和示例讲解!和上一节 Quar ...

  8. 使用LayUI操作数据表格

    接着 上一篇 继续完善我们的demo,这次我们加一个搜索按钮 搜索 在table标签的上方,加入这样一组html <div class="demoTable"> 搜索商 ...

  9. ionic2+Angular2:套接口明细步骤,以登录功能为例

    1.在app.module.ts引用HttpModul,并在imports内引用.截图如下:   2.在src目录下新建http服务.命令行:ionic g provider HttpService ...

  10. 在CentOS7上通过RPM安装实现LAMP+phpMyAdmin过程全记录

    在CentOS7上通过RPM安装实现LAMP+phpMyAdmin过程全记录 时间:2017年9月20日 一.软件环境: IP:192.168.1.71 Hostname:centos73-2.sur ...