python - 使用 Fabric 处理故障

标签 python deployment fabric

我正在尝试处理 fabric 上的故障,但我在文档中看到的示例过于本地化,不符合我的口味。如果许多操作中的任何一个失败,我需要执行回滚操作。然后,我尝试使用上下文来处理它,如下所示:

@_contextmanager
def failwrapper():
    with settings(warn_only=True):
        result = yield
    if result.failed:
        rollback()
        abort("********* Failed to execute deploy! *********")

然后

@task
def deploy():
    with failwrapper():
        updateCode()
        migrateDb()
        restartServer()

不幸的是,当其中一项任务失败时,我在 result 上没有得到任何信息。

有什么办法可以实现吗?还是有另一种方法来处理这种情况?

最佳答案

根据我的测试,你可以用这个来完成:

from contextlib import contextmanager

@contextmanager
def failwrapper():
    try:
        yield
    except SystemExit:
        rollback()
        abort("********* Failed to execute deploy! *********")

如您所见,我去掉了 warn_only 设置,因为我认为如果可以执行回滚则不需要它,并且无论如何您都将使用 abort() 中止执行。

Fabric 在遇到错误时引发 SystemExit 异常并且未使用 warn_only 设置。我们可以捕获异常并进行回滚。

关于python - 使用 Fabric 处理故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10827112/

相关文章:

python - 使用 Salt Stack 运行 CREATE EXTENSION 的推荐方法是什么?

python - Fabric 导入错误: cannot import name 'isMappingType' with Python 2. 7

python - 是什么让用户定义的类不可散列?

ruby-on-rails - 通过 Git 更新/部署 Rails 应用程序的最佳工作流程是什么?

php - 将 Mercurial 存储库部署到生产环境 - 安全问题和提示

python TypeError 格式字符串的参数不足

python Fabric 多个命令

python - 将函数分配给对象属性

python - 删除空括号并获取值

python 数据帧 : get 'set' from DataFrame elements