我正在使用Ansible构建我的第一个零停机时间部署。我已经围绕我的部署进行了前期和后期任务,以便在更新它们之前从负载均衡器中取出盒子,然后将它们放回去,但我想让事情更容易出错。我正在使用serial: n/2
一次部署几个方框。为了使事情更容错,如果在一个盒子上发生错误,我希望系统停止尝试部署到所有盒子,以防代码出现问题。我怎样才能做到这一点?同样,Ansible有任何简单的方法可以在出现错误时回滚吗?我已经看到一些人做了类似我后面的请求的东西,看起来像黑客的方式,我希望两个请求都有规范的东西。
答案 0 :(得分:1)
如果有太多主机发生故障,您可以使用maximum_fail_percentage来停止播放手册。
关于回滚 - Ansible鼓励“失败前进” - 即如果部署失败,您应该能够从头开始再次运行它。这就是Ansible的幂等性有用的地方 - 以前完成的任务不应该两次进行更改。
如果你真的想要回滚,你可以使用第二个播放的第二个剧本来完成它。 Ansible会在playbook中生成失败主机的列表,因此您可以使用它来将回滚playbook仅限制为失败的主机:
ansible-playbook deploy.yml || ansible-playbook rollback.yml --limit @$HOME/deploy.retry