基于fabric和hg的自动化部署

标签: fabric hg 自动化 | 发表时间:2015-12-25 00:42 | 作者:Raptor
出处:http://blog.csdn.net

自动化部署

fabric是个很好用的自动化部署工具,虽然功能比起puppet,saltstack之类要弱一些,但胜在用python,而且免安装服务端。

当然你要说docker更好我也同意,然而我是经常使用FreeBSD的,而且还有一些32位的低配系统,并不适合用docker。更不用说虚拟机了。

自动化部署的目的主要是简化手工部署的麻烦,包括初次安装部署和代码修改后的更新部署。初始部署主要是安装基础环境,初始化数据库等。更新部署则更麻烦一些,需要修改基础环境配置,变更数据库结构等。相比之下代码发布和更新反而是最简单的,用一个版本控制工具即可。

我是比较习惯用hg做代码版本管理的,当然这里要把hg换成git也可以,但我就是喜欢hg,你咬我啊。

fabric

fabric的官网是fabfile.org,基本用法都可以看官方文档,这里只对几种常用的用法作简单说明。

安装很简单,只要在本地用pip安装fabric即可,远程只要有SSH服务即可,不需要安装额外的东西,这点比puppet和saltstack省事。

使用上也很简单,最关键的是部署脚本是用python,比起puppet用的ruby来说,更合我口味。

默认的脚本文件名为: fabfile.py,当然你也可以用别的名字,但用起来就不方便了,类似make要用默认的Makefile文件名才方便一样。

执行默认脚本的命令为:fab <函数名>[<[参数名:]值>]

其中的函数名为fabfile.py中定义的任意函数(当使用@task装饰器时就只能使用已经装饰过的函数),也可以带上参数。对于特定主机或用户,还可以给函数加上角色装饰器。

运行本地命令的例子如下:

  from fabric.api import local
def deploy_1():
    local(“hg commit”)
    local(“hg push”)
fab deploy_1

运行远端命令的例子如下:

  from fabric.api import run
def deploy_2():
    run(“hg pull”)
    run(“hg update”)
fab deploy_2 -H hostname_or_ip

切换当前目录:

  with lcd(“path”) # 本地目录
with cd(“path”) # 远端

错误处理:任何返回值不为0的操作都将导致异常,除非…

  with settings(warn_only=True)

并且用命令的.failed属性来判断执行结果

env用于保存相关配置环境,比如SSH的KEY文件:key_filename,还有主机名列表:hosts,角色定义:roledefs等

角色的使用:

  env.roledefs={‘role1’:[“user1@server1:port1”, “user2@server2:port2”],
    ‘role2’:[“user3@server3:port3”]}
@roles(“role1”)
def deploy_3():
    pass

结合fabric和hg的部署

以一个简单的python web应用为例来说明。

一次完整的手工初次部署大致包括以下内容(假设服务端系统已安装必要软件,比如hg, python, virtualenv, database, webserver,其中database和webserver已经配置好,单独的virtualenv已创建)等:

  • 在virtualenv环境中安装必要的依赖包 pip install -r requirements.txt
  • 通过hg发布要部署的代码 [local] hg push ssh://user@host/path; [remote] hg update
  • 初始化数据库
  • 启动(通过gunicorn, supervisord等)

代码修改过以后再次部署则涉及以下一些内容:

  • 更新依赖包
  • 更新代码
  • 更新数据库结构
  • 重启服务

再考虑到可能需要分别部署到测试环境和正式环境,又需要考虑以下问题:

  • 测试环境和正式环境涉及不一样的配置(比如连接不一样的数据库,配置不同的端口,甚至静态文件指向不同的路径)
  • 必须是测试环境中测试通过的版本才可以更新到正式环境中
  • 正式环境有更严格的权限管理(开发部门不可以直接部署到正式环境,甚至不能接触正式环境的配置信息)

由此,我们至少需要两个代码仓库:一个是开发代码库(repo_dev),包括测试配置,另一个是正式配置仓库(repo_prod)。

那么,基本的fabfile.py的deploy_dev函数大致有以下内容:

  local("hg push repo_dev")
with cd("/target"):
    run("hg pull repo_dev")
    run("hg update")
    run("workon venv") # 切换到指定的virtualenv
    run("pip install -r requirements.txt")
    # 初始化数据库或更新数据库结构
    sudo("supervisorctl restart xxx") # gunicorn不能用supervisor重启,因为停止需要等待一段时间,建议用kill信号进行软重启

可以通过角色配置使repo_dev指定的远程服务器为测试主机 testhost ,在测试主机上测试通过以后,测试部分可以部署到正式机 prodhost 上。

  with cd("/prodconf"):
    run("hg pull repo_prod")
with cd("/prod"):
    run("hg pull testhost") # 从测试主机上更新代码
    run("hg update rev") # 注意,这里要更新测试过的指定版本
    run("cp /prodconf/config .") # 使用正式配置替换测试配置
    run("workon venv")
    run("pip install -r requirements.txt")
    # 更新数据库结构
    sudo("supervisorctl restart xxx")

这个部署函数使用另一个用户角色,只要控制这个角色只有测试部门有权限即可,开发部门即使不慎运行了这个部署函数,也会因为没有权限而失败。

作者:Raptor 发表于2015/12/25 0:42:53 原文链接
阅读:140 评论:0 查看评论

相关 [fabric hg 自动化] 推荐:

基于fabric和hg的自动化部署

- - CSDN博客推荐文章
fabric是个很好用的自动化部署工具,虽然功能比起puppet,saltstack之类要弱一些,但胜在用python,而且免安装服务端. 当然你要说docker更好我也同意,然而我是经常使用FreeBSD的,而且还有一些32位的低配系统,并不适合用docker. 自动化部署的目的主要是简化手工部署的麻烦,包括初次安装部署和代码修改后的更新部署.

Git和Mercurial(Hg)的分析

- gOODiDEA - 译言-电脑/网络/数码科技
来源Analysis of Git and Mercurial. 原文地址:http://code.google.com/p/support/wiki/DVCSAnalysis. (译者注:Mercurial以下简称Hg). 注:这篇分析完成于2008年夏季,当时我们正第一次为Google Code支持DVCS而作的研究工作.

Hyperledger Fabric V1.0 跳坑玩耍

- - SegmentFault 最新的文章
       最近有个项目需要用到超级账本的概念,随后在网上查阅相关的信息. 最后相中了 Fabric作为实验玩耍的目标. 要玩就要玩最新的啦,所以舍弃了v0.6的版本,但是截至这篇文章摸出来,v1.0还处于alpha阶段. 以下环境的搭建步骤很大一部分来自于 hyperledger-fabric.readthedocs.io,英语好的同学也可以直接看那边的教程.

Fabric批量远程执行操作

- - CSDN博客推荐文章
最近有个需求就是要在一个集群的多个机器上运行一些命令,比如启动、停止服务,运行一些脚本收集一些数据等,于是找到了python的一个框架Fabric. Fabric是一个Python库,用于简化使用SSH的应用程序部署或系统管理任务. 它提供的主要功能包括:执行本地或远程shell命令,上传/下载文件,以及其他辅助功能,如提示用户输入、中止执行等.

配置 fabric 穿越跳板机

- - 膘叔
在转这篇文章的时候,我觉得 很懒,所以我几乎没有排版就直接ctrl+c,ctrl+v就过来了. 下面是正文,链接来源是:https://mozillazg.com/2013/12/python-fabric-gateway.html. 说实话,跳板机给研发的日常工作添加了些许麻烦. 幸好 fabric 提供了穿越跳板机的功能,使跳板机不再影响我们的工作.

Hyperledger Fabric V1.0 环境搭建 - 个人文章 - SegmentFault

- -
学习区块链技术有段时间了,刚好晚上有空把超级账本子项目fabric v1.0部署运行及开发环境的搭建过程整理下,编写的内容主要参照官方文档. 由于fabric项目目前还处于孵化阶段,正式版本预计5月份才会到来. 近期官方示例和文档也频繁更新中,本文内容主要基于源码中 “examples” 和 “devenv” 来完成fabric入门示例的快速部署运行和统一开发环境的搭建.

Hyperledger Fabric 1.0,基于区块链的分布式账本

- - 开源中国社区最新新闻
由 Linux 基金会发起创建的开源区块链分布式账本 —— Hyperledger Fabric,已经迎来了 1.0 版本. 该项目着重于性能和可靠性,以及推动区块链和分布式账本技术的跨行业协作. Hyperledger Fabric 可用于全球供应链管理、金融交易、资产账和去中心化的社交网络等场景,但无意以此来构建一种加密货币.

Twitter推移动应用开发工具Fabric 阿里百度已在用

- - TechWeb 今日焦点 RSS阅读
Twitter推移动应用开发工具Fabric 阿里百度已在用. 【TechWeb报道】10月23日消息,据国外媒体报道,Twitter周三发布了一款免费的移动应用开发者工具包——Fabric,旨在帮助开发者更好地编程以及增加公司收益. Twitter周三召开了首届面向移动应用开发者的“一对多消息服务”大会,并在会上推出了Fabric平台.

iPhone App自动化测试

- BeerBubble - Taobao QA Team
         无线客户端的发展很快,特别针对是android和ios两款无线操作系统的客户端应用,相应的测试工具也应运而生,这里主要给大家介绍一些针对iPhone App的自动化测试工具.          首先,我们把这些测试框架分为三大类:接口测试工具、注入式UI测试工具、录放式UI测试工具.

Android Robotium自动化测试

- - CSDN博客移动开发推荐文章
1、官方网站下载测试工程demo. 从 http://code.google.com/p/robotium/downloads/detail?name=ExampleTestProject_v3.6.zip 下载官方的Android测试工程demo. 解压后的文件NotePad、NotePadTest、readme.txt.