使用 fabric
fabric是一个用python实现的远程部署工具,它可以批量操作远程服务器。实际工作中,很多时候需要在多台线上机器上执行同样的操作,这时fabric会很有用。
安装
pip install fabric
使用(fabric.py)
# from fabric.api import cd,run,env,hosts,execute,roles
from fabric.api import *
# 远程机器,多个机器fabric会依次启动
env.hosts = [
'user@10.16.29.176:22',
'user@10.16.29.44:22'
]
env.password = '*******'
# 进入/home/user目录,执行命令
def test():
with cd('/home/user'):
run('du -sh')
# ----在不同的机器上执行不同的任务
env.roledefs = {
'server1': [
'user@10.16.29.176:22',
],
'server2': [
'user@10.16.29.44:22',
]
}
env.password = '*******'
# server1执行task1
@roles('server1')
def task1():
run('ls /home/ -l | wc -l')
# server2执行task2
@roles('server2')
def task2():
run('du -sh /home/user')
def test1():
# 遇到报错警告,而不是退出
with settings(warn_only=True):
execute(task1)
execute(task2)
exit()
# ----接收参数
def hello(foo):
print 'Hello, %s'%foo;
执行
fab test
用fabric来部署代码也是一件很爽的事情(upload.py)
# coding=utf-8
from datetime import datetime
from fabric.api import *
env.hosts = ['user@10.16.29.176:22']
env.password = '********'
# 本地打包
def pack():
tar_files = ['*.py', 'testdir/*']
local('rm -f deploy.tar.gz')
local('tar -zcvf deploy.tar.gz --exclude=\'*.tar.gz\' --exclude=\'upload.py\' %s' % ' '.join(tar_files))
# 部署
def deploy():
tmp_dir = '/tmp/deploy.tar.gz'
put('deploy.tar.gz', tmp_dir)
tag = datetime.now().strftime('%y.%m.%d_%H.%M.%S')
deploy_dir = '/home/user/%s' % tag
run('mkdir %s' % deploy_dir)
with cd(deploy_dir):
run('tar -zxvf %s' % tmp_dir)
run('rm %s' % tmp_dir)
如果文件名不是fabric.py,需要指定文件名
fab -f upload.py pack
fab -f upload.py deploy