http://fabric-chs.readthedocs.io/zh_CN/chs/tutorial.html
Fabric 是一个 Python (2.5-2.7) 的库和命令行工具,用来提高基于 SSH 的应用部署和系统管理效率。
更具体地说,Fabric 是:
一个让你通过 命令行 执行 无参数 Python 函数 的工具;
一个让通过 SSH 执行 Shell 命令更加 容易 、 更符合 Python 风格 的命令库(建立于一个更低层次的库)。
自然而然地,大部分用户把这两件事结合着用,使用 Fabric 来写和执行 Python 函数或 task ,以实现与远程服务器的自动化交互。
参考廖雪峰老师的文章:https://www.liaoxuefeng.com/article/001373892650475818672edc83c4c978a45195eab8dc753000
简单实现部署脚本:
from datetime import datetime
from fabric.api import *
env.user = 'root'
env.hosts = ['xx.xx.xxx.xx']
env.remote_output = '/www/demo'
def deploy():
print("---准备上传")
tar_files = ['public/*']
local('rm -f example.tar.gz')
local('tar -czvf example.tar.gz --exclude=\'*.tar.gz\' --exclude=\'fabfile.py\' %s' % ' '.join(tar_files))
remote_tmp_tar = '/www/demo/example.tar.gz'
remote_tmp_doc = '/www/demo'
run('rm -f %s' % remote_tmp_tar)
put('example.tar.gz',remote_tmp_tar)
with cd(remote_tmp_doc):
run('tar -xzvf %s -C ./' % remote_tmp_tar)
比较有意思的是fabric也提供了一些工具,如rsync实现web目录的同步,本质是rsync
命令的封装。
使用举例:
from fabric.api import env, local, task, settings
from fabric.contrib.project import rsync_project
from fabric.colors import *
env.user = 'root'
env.hosts = ['xx.xx.xx.xxx']
def prepare():
print green('提交到github.....')
local("git pull")
local("git add .")
local("git add -p && git commit -m 'fabric commit'")
local("git push")
local('rm -rf public')
local('hugo')
def rsync():
print green('同步到远程服务器....')
rsync_project(local_dir="public/*", remote_dir='/www/wwwroot/blog_tyrad_cc', delete='true')
def deploy():
prepare()
rsync