Выбор ответа Middle CI/CD обновлено

Отменить устаревший прогон

Вопрос

Разработчик пушит в PR три коммита подряд, и в GitHub Actions копятся три прогона пайплайна. Нужен только последний. Как это настроить?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: concurrency с группой по ветке и cancel-in-progress: true. concurrency объединяет прогоны в группу (например, ${{ github.workflow }}-${{ github.ref }}), и при cancel-in-progress: true новый прогон отменяет предыдущий в той же группе.

Варианты ответа

  1. Это невозможно, каждый push всегда запускает отдельный прогон до конца
  2. concurrency с группой по ветке и cancel-in-progress: trueправильный ответ
  3. Добавить if: always() к каждой джобе workflow
  4. Поставить timeout-minutes: 1 на старые прогоны

Разбор

concurrency объединяет прогоны в группу (например, ${{ github.workflow }}-${{ github.ref }}), и при cancel-in-progress: true новый прогон отменяет предыдущий в той же группе. Экономит минуты раннеров и время ожидания. Для деплоя в прод отмену обычно не включают, чтобы не прервать выкатку на середине.

  • Возможность есть, это стандартная настройка.
  • if: always() заставляет шаг выполняться даже после ошибки, это противоположная задача.
  • Таймаут в минуту сломает нормальные прогоны.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме