如何在Fabric文件中设置目标主机

问题:

我想使用Fabric将我的Web应用程序代码部署到开发,分段和生产服务器。我的fabfile:

def deploy_2_dev():
  deploy('dev')

def deploy_2_staging():
  deploy('staging')

def deploy_2_prod():
  deploy('prod')

def deploy(server):
  print 'env.hosts:', env.hosts
  env.hosts = [server]
  print 'env.hosts:', env.hosts

样品输出:

host:folder user$ fab deploy_2_dev
env.hosts: []
env.hosts: ['dev']
No hosts found. Please specify (single) host string for connection:

当我创建一个如Fabric docs所示的set_hosts()任务时,env.hosts设置正确。但是,这不是一个可行的选择,也不是装饰器。在命令行上传递主机最终将导致一些调用fabfile的shell脚本,我希望有一个单一的工具正常工作。
它在Fabric文档中说’env.hosts只是一个Python列表对象’。从我的观察,这根本不是真的。
谁能解释这里发生了什么?如何将主机设置为部署?

回答:

我通过为每个环境声明一个实际的功能来做到这一点。例如:

def test():
    env.user = 'testuser'
    env.hosts = ['test.server.com']

def prod():
    env.user = 'produser'
    env.hosts = ['prod.server.com']

def deploy():
    ...

使用上述功能,我将键入以下内容部署到我的测试环境中:

fab test deploy

…以及以下部署到生产中:

fab prod deploy

这样做的好处是{} {} {} {} test这是非常有用的。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: How to set target hosts in Fabric file

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

− 2 = 1