Fabric是一个Python(2.5-2.7)库,用于简化使用SSH的应用程序部署或系统管理任务。
它提供的操作包括:执行本地或远程shell命令,上传/下载文件,以及其他辅助功能,如提示用户输入、中止执行等。
本文主要介绍CentOS 6.3上使用fabric进行自动部署的基本方法。
1. 环境部署
本节主要介绍python版本升级,pip及fabric部署方法。
CentOS 6.3自带的Python版本为2.6,首先需要升级到2.7版本。由于旧版本的Python已被深度依赖,所以不能卸载原有的Python,只能全新安装。
1. 下载Pyhon,选择下载Gzipped source tar ball (2.7.6) (sig),网址:https://www.python.org/download/releases/2.7.6
2. 解压安装,命令如下
tar -xvf Python-2.7.6.tgz
cd Python-2.7.6
./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
至此CentOS6.3系统Python已成功升级至2.7.6版本。
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. 执行安装命令
pip install fabric
2. 创建连接(否则会报错提示“命令不存在”)
ln -s /usr/local/python2.7/bin/fab /usr/bin/fab
2. 脚本编写
本节对fabric用法进行简单介绍,并提供实例以供参考。
2.1. Hello,fab
1. 在当前目录下新建文件fabfile.py,输入内容如下
2. 执行命令fab hello,结果如下
3. 文件名不为fabfile.py时需进行指定
7 | Fatal error: Couldn't find any fabfiles! |
11 | Remember that -f can be used to specify fabfile path, and use -h for help. |
4. 参数传递
2.2. 本地操作
执行本地操作命令使用local
1. fabfile.py脚本内容如下
1 | from fabric.api import local |
2. 执行命令fab test,结果如下
3 | [localhost] local: cd /home/ |
5 | [localhost] local: ls -l|wc -l |
2.3. 远程操作
执行远程操作命令使用run
1. fabfile.py脚本内容如下
1 | from fabric.api import cd,run,env,hosts |
3 | env.hosts=['192.168.85.99:22','192.168.85.101:22'] |
2. 执行命令fab test,结果如下
3 | [192.168.85.99:22] Executing task 'test' |
5 | [192.168.85.99:22] run: du -sh |
7 | [192.168.85.99:22] out: 392G . |
11 | [192.168.85.101:22] Executing task 'test' |
13 | [192.168.85.101:22] run: du -sh |
15 | [192.168.85.101:22] out: 5.6G . |
17 | [192.168.85.101:22] out: |
19 | Disconnecting from 192.168.85.99... done. |
21 | Disconnecting from 192.168.85.101... done. |
3. 多服务器混合,需要在不同服务器进行不同操作时,可参考如下脚本
1 | from fabric.api import env,roles,run,execute |
5 | 'server1': ['root@192.168.85.99:22',], |
7 | 'server2': ['root@192.168.85.100:22', ] |
17 | run('ls /home/ -l | wc -l') |
结果如下
3 | [root@192.168.85.99:22] Executing task 'task1' |
5 | [root@192.168.85.99:22] run: ls /home/ -l | wc -l |
7 | [root@192.168.85.99:22] out: 27 |
9 | [root@192.168.85.99:22] out: |
11 | [root@192.168.85.100:22] Executing task 'task2' |
13 | [root@192.168.85.100:22] run: du -sh /home |
15 | [root@192.168.85.100:22] out: 1.4G /home |
17 | [root@192.168.85.100:22] out: |
19 | Disconnecting from 192.168.85.99... done. |
21 | 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