0Pricing
DevOps Bootcamp · 课时

使用 rescue 与 always 实现 Try / Catch

从失败中优雅恢复

使用 rescue 与 always 实现 Try / Catch 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。

block 获得安全网

将 block 与 rescue 和 always 配对,就能为任务提供 try、catch 和 finally。失败也可以恢复。🛟

rescue 部分

如果 block 中的任何任务失败,Ansible 就会跳转到 rescue,改为运行其中的任务,就像 catch 子句一样。

- block:
    - ansible.builtin.command: /opt/risky-step
  rescue:
    - ansible.builtin.debug:
        msg: "Step failed, recovering"

always 无论如何都会运行

无论 block 成功还是失败,always 部分都会运行,非常适合执行移除临时文件之类的清理工作。

- block:
    - ansible.builtin.command: /opt/deploy
  always:
    - ansible.builtin.file:
        path: /tmp/lock
        state: absent

三者结合

将 block、rescue 和 always 作为一个结构使用:先尝试执行工作,捕获失败,然后始终干净地完成收尾。

- block:
    - ansible.builtin.command: /opt/deploy
  rescue:
    - ansible.builtin.debug:
        msg: "Rolling back"
  always:
    - ansible.builtin.debug:
        msg: "Done either way"

rescue 会重置失败状态

如果 rescue 成功完成,该主机就不再处于失败状态。play 会继续运行,就像 block 已经成功一样。

执行顺序

任务首先在 block 中运行;如果失败,block 的其余任务会被跳过,然后启动 rescue。无论发生什么,always 都会最后运行。

当 rescue 本身失败时

如果 rescue 中的任务也失败,该主机会被标记为失败,但在 play 针对该主机停止之前,always 仍然会运行。

检查错误

在 rescue 中,您可以读取 ansible_failed_task 和 ansible_failed_result,查看哪个任务出错以及原因。

- rescue:
    - ansible.builtin.debug:
        msg: "Failed task was {{ ansible_failed_task.name }}"

实际用法:回滚

经典模式是:在 block 中执行部署,在 rescue 中撤销更改,并在 always 中重启或解锁。每次运行都能干净地恢复。

不只是隐藏错误

rescue 用于平稳恢复,而不是让错误悄无声息。请记录失败并修复状态,不要假装什么都没有出错。⚠️

没有 rescue 就会立即停止

如果没有 rescue 部分,失败的 block 会像任何失败的任务一样:立即停止针对该主机的 play。

快速检查

下面确认一下 always 的行为。

回顾

rescue 会捕获 block 的失败并恢复主机,而 always 每次都会运行以执行清理。对于 Ansible 来说,这就是 try、catch 和 finally。✅

常见问题解答

「使用 rescue 与 always 实现 Try / Catch」课时是免费的吗?

是的 — 「使用 rescue 与 always 实现 Try / Catch」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。

「使用 rescue 与 always 实现 Try / Catch」这节课中我会学到什么?

从失败中优雅恢复 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 DevOps Bootcamp 需要有经验吗?

无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「使用 rescue 与 always 实现 Try / Catch」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 DevOps Bootcamp 课中编写并运行代码吗?

能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 block 将任务分组
  2. 使用 rescue 与 always 实现 Try / Catch
  3. 控制失败:failed_when 与 ignore_errors
  4. 使用 fail 模块进行自定义断言
← 返回 DevOps Bootcamp