Make Error Handling: Rollback, Resume, Ignore — стратегии

Мы просто и по делу рассказываем про ИИ-инструменты для работы: сравнения, пошаговые гайды, бесплатные альтернативы и реальные сценарии применения. Помогаем выбрать между ChatGPT, Gemini, Claude, локальными моделями и десятками узкоспециализированных сервисов — от дизайна и HR до аналитики и SEO. Меньше хайпа, больше практики и экономии времени каждый день.

makerollbackresume

В make ошибки по умолчанию останавливают сборку. Это безопасно: как только одна команда завершилась с ненулевым кодом, make считает цель сломанной. Но на практике нужны разные стратегии обработки ошибок: откатить артефакты, продолжить выполнение или осознанно проигнорировать сбой.

1. Stop by default — базовое поведение

Если команда завершилась с ошибкой, выполнение рецепта прерывается:

build:
	go build ./...
	cp app /deploy/

Если go build упадёт, копирование не начнётся. Это защищает от “грязной” сборки.

2. Rollback — откат после ошибки 🔁

make не умеет транзакции из коробки, поэтому rollback реализуют вручную в shell-командах:

deploy:
	cp app /deploy/app.new && \
	mv /deploy/app.new /deploy/app || \
	{ rm -f /deploy/app.new; exit 1; }

Идея простая:

  • сначала создаём временный артефакт
  • заменяем основной файл только после успешного шага
  • при ошибке чистим хвосты

Для каталогов и сборочных файлов полезен .DELETE_ON_ERROR:

.DELETE_ON_ERROR:

Если цель начала создаваться, но команда завершилась ошибкой, make удалит повреждённый файл. Это важная защита от частично собранных артефактов.

3. Resume — продолжить сборку несмотря на ошибки 🚀

Если нужно собрать максимум возможного, используйте ключ -k (--keep-going):

make -k

make продолжит выполнять независимые цели, даже если одна из них упала. Это полезно:

  • в CI для массовой проверки модулей
  • при сборке нескольких независимых компонентов
  • для получения полного списка проблем за один прогон

Важно: -k не “чинит” зависимости. Если цель зависит от сломанной, она тоже не соберётся.

4. Ignore — осознанно игнорировать ошибки 🙈

Иногда ошибка допустима: например, файл может уже отсутствовать.

clean:
	-rm -f app

Префикс - говорит make: не останавливайся, даже если команда вернула ошибку.

Альтернатива — глобальный режим:

.IGNORE: clean
.IGNORE:

Но глобальный ignore опасен: можно скрыть реальные проблемы. Лучше применять точечно.

5. Когда использовать какую стратегию 📌

  • Rollback — при деплое, миграциях, работе с артефактами
  • Resume — при batch-сборках, тестах, мультипроектных пайплайнах
  • Ignore — для cleanup и необязательных шагов

Практический совет

Лучший подход в make — не подавлять ошибки без необходимости.

  1. Сначала: безопасные временные файлы + .DELETE_ON_ERROR
  2. Затем: -k, если нужен полный отчёт
  3. И только потом: - или .IGNORE для контролируемых исключений

Грамотная обработка ошибок в make делает сборку предсказуемой, а CI/CD — заметно надёжнее. 🔧

Подборку каналов про IT — с практикой, DevOps, backend и инфраструктурой — стоит посмотреть ниже.

Читайте так же