0Pricing
DevOps Bootcamp · Урок

Try / Catch с rescue и always

Корректно обрабатывайте сбои

«Try / Catch с rescue и always» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.

Блоки получают защитный механизм

Сочетайте block с rescue и always, чтобы получить конструкции try, catch и finally для своих задач. Сбои становятся восстанавливаемыми. 🛟

Раздел rescue

Если какая-либо задача в блоке завершается с ошибкой, Ansible переходит к rescue и вместо неё запускает эти задачи — подобно предложению catch.

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

always выполняется несмотря ни на что

Раздел 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 завершается успешно, узел больше не считается ошибочным. Плейбук продолжается так, будто блок выполнился успешно.

Порядок выполнения

Сначала выполняются задачи блока; при ошибке оставшаяся часть блока пропускается и запускается rescue. В любом случае always выполняется последним.

Если rescue тоже завершается с ошибкой

Если задача в rescue также завершается с ошибкой, узел помечается как ошибочный, но 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 блок с ошибкой ведёт себя как любая задача с ошибкой: он немедленно останавливает выполнение плейбука для этого узла.

Быстрая проверка

Давайте проверим, как работает always.

Итоги

rescue перехватывает ошибки блока и восстанавливает узел, а always каждый раз выполняется для очистки. Try, catch и finally для Ansible. ✅

Часто задаваемые вопросы

Урок «Try / Catch с rescue и always» бесплатный?

Да — полный текст урока «Try / Catch с rescue и always» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.

Чему я научусь в уроке «Try / Catch с rescue и always»?

Корректно обрабатывайте сбои Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать DevOps Bootcamp?

Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Try / Catch с rescue и always»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке DevOps Bootcamp?

Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Группировка задач с block
  2. Try / Catch с rescue и always
  3. Управление сбоями: failed_when и ignore_errors
  4. Пользовательские проверки с модулем fail
← Назад к DevOps Bootcamp