Python Fabric远程自动部署简介
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远程自动部署简介的更多相关文章
- 使用Publish Over SSH插件实现远程自动部署
背景: 现场的部署环境开放外网环境困难,只有一台机器能够开发外网,应对该情况,所有的补丁文件需要直接在master机器上面生成,然后命令移动到其他的服务器上面去. 这里使用到了jenkins的Publ ...
- python fabric远程操作和部署
博客迁往:新地址(点击直达) 新博客使用markdown维护,线下有版本号库,自己写的所以会定时更新同步.同一时候提供更好的导航和阅读体验 csdn对markdown支持不好.所以旧版不会花时间进行同 ...
- 最新JetBrainsPyCharm自动部署Python(Django,tornado等)项目至远程服务器
每次开发Python项目时,对于所有Python开发人员来说,最枯燥的不是修改代码,而是实时将自己的代码上传至远程服务器,进行测试或者部署,本人最初开发也是这样,通过使用Xshell 5,WinSCP ...
- 持续集成之Jenkins自动部署war包到远程服务器
一.无war包链接的情况 无war包链接时,需先下载war包到本地,然后执行: ---------------------------------------------以下部分为转载-------- ...
- IntelliJ IDEA自动部署项目至远程服务器与传统部署项目至远程服务器的区别
每次开发Java项目时,对于所有Java开发人员来说,最枯燥的不是修改代码,而是实时将自己的代码上传至远程服务器,进行测试或者部署,本人最初开发也是这样,通过使用Xshell 5,WinSCP等工具对 ...
- maven自动部署到远程tomcat教程
使用maven的自动部署功能可以很方便的将maven工程自动部署到远程tomcat服务器,节省了大量时间. 本文章适用于tomcat的7.x ,8.x, 9.x版本. 下面是自动部的步骤 1,首先,配 ...
- nginx tomcat 自动部署python脚本【转】
#!/usr/bin/env python #--coding:utf8-- import sys,subprocess,os,datetime,paramiko,re local_path='/ho ...
- Hexo快速搭建静态博客并实现远程VPS自动部署
这篇文章将如何搭建hexo,以及如何通过git webhooks实现远程vps的自动部署 这篇文件适合的条件: 简单的用于个人博客.公司博客展示,hexo的定位是静态博客,要实现动态服务器的功能并不适 ...
- IDEA自动部署WEB工程至远程服务器(学习笔记)
一.部署Web工程的几种方式 ①本地打war,上传至远程服务器tomcat容器即可 优点:简单粗暴 缺点:浪费时间 ②IDEA自动部署至远程服务器 优点:节省大量时间 缺点:配置稍多(第一次) 二.I ...
随机推荐
- SpringMVC的数据格式化-注解驱动的属性格式化
一.什么是注解驱动的属性格式化? --在bean的属性中设置,SpringMVC处理 方法参数绑定数据.模型数据输出时自动通过注解应用格式化的功能. 二.注解类型 1.DateTimeFormat @ ...
- spring boot基础 入门
spring boot基础 spring boot 的简单搭建 spring boot 的基本用法 spring boot 基本用法 自动配置 技术集成 性能监控 源码解析 工程的构建 创建一个mav ...
- Azure SQL Database (24) 使用新管理界面,创建跨数据中心标准地域复制(Standard Geo-Replication)
<Windows Azure Platform 系列文章目录> 文本是对:SQL Azure (17) SQL Azure V12 - 跨数据中心标准地域复制(Standard Geo-R ...
- java中Set类接口的用法
在Java中使用Set,可以方便地将需要的类型,以集合类型保存在一个变量中.主要应用在显示列表. Set是一个不包含重复元素的collection.更确切地讲,set 不包含满足 e1.equals( ...
- 线段树初步__ZERO__.
线段树,顾名思义,就是指一个个线段组成的树. 线段树的定义就是: 线段树是一种二叉搜索树,与区间树相似,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点.使用线段树可以快速的查找某 ...
- .Net Core2.0 + Nginx + CentOS 部署
准备把项目往Linux上迁移,整个流程跑了一下,也遇到无数个坑...以下为亲测并修改后的完整流程... 安装ZIP yum install -y unzip zip Putty:WINDOWS上传文件 ...
- 黑马程序员Java基础班+就业班课程笔记全发布(持续更新)
正在黑马学习,整理了一些课程知识点和比较重要的内容分享给大家,也是给自己拓宽一些视野,仅供大家交流学习,大家有什么更好的内容可以发给我 ,现有黑马教程2000G QQ 1481135711 这是我总 ...
- 安装Vue2的devtools发生错误npm ERR! code EINTEGRITY npm ERR! sha1-HTFDXrRzR2Ew8Bv9zlMSCVgPsS0= integrity checksum failed when using sha1: wanted sha1-HTFDXrRzR2Ew8Bv9zlMSCVgPsS0= but got sha1-Z6BeTMF4nhAO6h5A
1.github下载地址:https://github.com/vuejs/vue-devtools 2.下载好后进入vue-devtools-master工程 执行npm install ---- ...
- Running Spark on YARN
Running Spark on YARN 对 YARN (Hadoop NextGen) 的支持是从Spark-0.6.0开始的,后续的版本也一直持续在改进. Launching Spark on ...
- Life Forms (poj3294 后缀数组求 不小于k个字符串中的最长子串)
(累了,这题做了很久!) Life Forms Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 8683 Accepted ...