Fabric python的发布部署好帮手工具

Fabric是一个Python库和命令行工具,旨在为应用部署和系统管理任务的SSH的流水线式操作,使之更加高效和方便。Fabric提供了一套基本的执行本地和远程shell命令、上传和下载文件的操作,包括一些辅助函数,例如驱动正在运行的用户输入或者放弃执行。

Fabric通过把大量频繁使用的SSH操作写入到一个脚本中(fabric.py),来远程执行一些应用部署或者系统维护的任务。Fabric是类似paramiko的一个库,是对paramiko的再次封装,所以比使用paramiko更简单。

Fabric的优点:

1. 角色定义

2. 代码易读

3. 封装了本地、远程操作

4. 参数灵活,能偶动态指定host/role等,还有并发执行(基于multiprocessing)

5. 完整的日志输出

安装Fabric



Fabric的安装很简单,可以直接使用pip或者easy_install安装到当前Python环境中,或者下载最新的源码使用"python setup.py xxx"的方式来安装:

#pip install fabric

使用Fabric

1 Fabric通过命令行工具fab来执行定义在fabfile.py中的任务



常用的配置和函数如下

1. 常用的fab命令选项和参数:

-l    显示可用的task

-H    指定host,多个host用逗号分开

-R    指定role,多个role用逗号分开

-P    并发数,默认是串行

-w    warn_only,默认为遇到异常直接放弃执行并退出

-f    指定入口文件,fab默认入口文件是:fabfile.py

例子1:设置默认要求的文件名

fabfile.py

def hello():

print("Hello world!")

$cd 到fabfile.py目录

$fab hello

Hello world!

Done

例子2:指定自定义的文件名

test.py

def hello():

print("Hello world!")

$cd 到test.py目录

$fab -f test.py hello

Hello world!

Done

2 任务函数 Fabric中的任务就是一个个Python函数



示例:

from fabric.api import run

def host_type():

run(‘uname -s‘)

3.1 任务的参数(函数参数)

方式1

def hello(name="world"):

print("Hello %s!" % name)

$fab hello:name=xyl

Hello xyl

Done

方式2

$fab hello:xy

Hello xy

Done

3.2 多个参数(其实就是函数的位置参数和名称参数问题)

def new_user(username, admin=‘no‘, comment="No comment provided"):
    print("New User (%s): %s" % (username, comment))
    pass

1:

$fab -f test.py new_user:xy

New User (xy): No comment provided

Done.

2:

$fab -f test.py new_user:username=xyl

New User (xy): No comment provided

Done

3:

$fab -f test.py new_user:’xy‘,’yes‘,‘hello world‘

New User (xy): hello world

Done.

4:

$ fab -f test.py new_user:‘xy‘,comment="hello world",‘yes‘

New User (xyl): hello world

yes

Done

执行本地命令:

from fabric.api import local

def prepare_deploy():

local("./manage.py test my_app”)#注意文件路径这种是相对于当前文件路径写法

local("git add -p && git commit")
    local("git push")

组织代码

from fabric.api import local

def test():
    local("./manage.py test my_app")

def commit():
    local("git add -p && git commit")

def push():
    local("git push")

def prepare_deploy():
    test()
    commit()
    push()

出错时的处理

1:

遇到出错时,自动停止执行下面的语句

2:

处理出错的情况

from __future__ import with_statement
from fabric.api import local, settings, abort
from fabric.contrib.console import confirm

def test():
    with settings(warn_only=True):
        result = local(‘./manage.py test my_app‘, capture=True)
    if result.failed and not confirm("Tests failed. Continue anyway?"):
        abort("Aborting at user request.")

[...]

链接:

默认是本地,执行下面的命令默认在本机上

def deploy():
    code_dir = ‘/srv/django/myproject‘
    with cd(code_dir):
        run("git pull")

run("touch app.wsgi")



cd  命令表示执行远程的,代替lcd(这个表示本机)

run 代表远程执行的命令,用来代替local()方法


由于这个文件并未指定远程主机,所以默认是ssh 本机主机名@local :port

远程链接:

def deploy():
    code_dir = ‘/srv/django/myproject‘
    with settings(warn_only=True):

if run("test -d %s" % code_dir).failed:

run("git clone [email protected]:/path/to/repo/.git %s" % code_dir)#执行这个时候是可以进行输入密码的,在下面的输出地方

with cd(code_dir):
        run("git pull")
        run("touch app.wsgi")

这是输出:

$ fab deploy
No hosts found. Please specify (single) host string for connection: my_server
[my_server] run: test -d /srv/django/myproject

Warning: run() encountered an error (return code 1) while executing ‘test -d /srv/django/myproject‘

[my_server] run: git clone [email protected]:/path/to/repo/.git /srv/django/myproject

[my_server] out: Cloning into /srv/django/myproject...

[my_server] out: Password: <enter password>这地方可以输入我们的密码

[my_server] out: remote: Counting objects: 6698, done.
[my_server] out: remote: Compressing objects: 100% (2237/2237), done.
[my_server] out: remote: Total 6698 (delta 4633), reused 6414 (delta 4412)
[my_server] out: Receiving objects: 100% (6698/6698), 1.28 MiB, done.
[my_server] out: Resolving deltas: 100% (4633/4633), done.
[my_server] out:
[my_server] run: git pull
[my_server] out: Already up-to-date.
[my_server] out:
[my_server] run: touch app.wsgi

Done.

链接之前,预先定义参数:

from __future__ import with_statement
from fabric.api import *
from fabric.contrib.console import confirm

env.hosts = [‘my_server’]  #这是全局的,表示下面的命令都是在my_server主机上执行 my_server可是localhost,或ip地址

#这是一个列表,如果是[‘localhost’,’192.168.2.3’]那就会执行test两遍

def test():

do_test_stuff()

时间: 2024-10-08 05:07:46

Fabric python的发布部署好帮手工具的相关文章

NET5实践:项目创建-结构概述-程序运行-发布部署

ASP.NET5实践01:项目创建-结构概述-程序运行-发布部署 1.项目创建 ASP.NET5项目模板有三种: 新建项目: 选择模板: 2.结构概述 References对应配置是project.json中: "frameworks": { "dnx451": { }, "dnxcore50": { } }, ASP.NET5开发时支持多版本的clr共存,但运行时是使用其中一种. dnxcore50是跨平台.模块化的coreclr.它有多种,如

[原创]好买财富测试环境自动化发布部署系统实践

一  为什么要开发一套测试环境自动化发布部署系统? (1) 好买的交易系统越来越庞大,越来越复杂,仅搭建一套系统要涉及到50多件内容: (2)手工搭建测试环境容易出错,投诉较多,各业务方抱怨较多: (3)搭建测试环境效率低下,庞大的系统,旧的方式需要大约忙1天,有时出了问题时间会更长, (4)开发多分支并行开发,抢占市场,要求必须满足公司在快速开发和迭代测试,目前维护了16套环境,估计16年会更多: (5)  以前系统搭建,太依赖个人的经验,人员离职会造成非常大的瓶颈; (6)都是领导逼的,这年

ASP.NET5实践01:Web项目创建、结构概述、程序运行、发布部署

1.项目创建 ASP.NET5项目模板有三种: 新建项目: 选择模板: 2.结构概述 References对应配置是project.json中: "frameworks": { "dnx451": { }, "dnxcore50": { } }, ASP.NET5开发时支持多版本的clr共存,但运行时是使用其中一种. dnxcore50是跨平台.模块化的coreclr.它有多种,如:dnx-coreclr-win-*,dnx-coreclr-li

ASP.NET网站怎么发布 Web项目程序怎么发布部署(暂时收藏)

Web程序如何发布部署呢.网站项目做好了,需要发布出来,提交给客户,装上服务器.那怎么在ASP.NET开发环境中将网站程序发布出来呢 ^_^ 工具/原料 Visual Studio 2010  ( 其他 VS 开发环境类似 ) 完成的项目程序 方法/步骤 在要发布的项目上右击,选择[发布]   在发布Web对话框中,选择发布方法为文件系统   选择要发布的路径,点击[发布]   在发布路径下,已经生成了发布的文件系统 然后就可以在IIS上发布网站啦  #^_^# END 注意事项 发布好的程序,

CentOS6.7+Python+Flask开发框架部署

系统环境: CentOS6.7的Base service版本. 软件包提供: 官方下载 软件包版本: Readline-devel: yum安装 openssl and openssl-devel: yum安装 Python: Python-2.7.6.tar.xz ipython: ipython-1.2.1.tar.gz Setuptools: setuptools-20.3.1.tar.gz pip: pip-8.1.1.tar.gz virtualenv: virtualenv-15.0

一键发布部署vs插件[AntDeploy],让net开发者更幸福

一键发布工具(ant deploy tool) 插件下载地址: https://marketplace.visualstudio.com/items?itemName=nainaigu.AntDeploy 1.iis一键发布自动部署 (iis deploy support) 支持netcore 和 netframework发布 (支持mvc webapi) 支持website自动创建 ps:需要在windows 服务器上安装一个agent 具体请看下面有说明 2.docker一键发布自动部署 (

17 打包Python程序发布

分享一下我老师大神的人工智能教程吧.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net 17. 打包Python程序发布 Python程序都是脚本的方式,一般是在解析器里运行,如果要发布出去,需要提前安装解析器才可以运行,为了在Windows里方便发布,只要点击一个EXE文件运行,并且打包所需要库文件,这样发布给用户使用就会更方便.可以使用打包工具py2exe来做这样的事情,它是一个Python程序在Windows发布

python web项目部署

python web项目部署 python django默认启动python3 manage.py runserver 0.0.0.0:8000这种方式调用wsgiref单机模块,性能较低,生产环境不用 线上使用uwsgi工具(由c语言编写的工具,性能强悍)启动django,使用方式: 在激活虚拟环境的前提下,使用uwsgi安装配置好virtualenvwrapper工具,或者virtualenv皆可 1.准备django项目 NB_crm 2.安装虚拟环境,在虚拟环境下,安装uwsgi,进行部

Ubuntu14.04安装pycharm用于Python开发环境部署,并且支持pycharm使用中文输入

一.目标 实现在Linux下用pycharm调试工具/Python开发 Linux使用vi/vim工具写Python,缺点:调试不方便,无代码提示.跳转等诸多功能. Windows使用idle/pycharm/eclipse等,环境包安装麻烦.写好的代码往往也得迁移至Linux服务器环境. 解决办法:直接在Linux环境下安装pycharm编译器. 附:about pycharm PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调