Писал ли ты стадии и джобы в CI/CD
Что проверяют
Понимаете ли вы, как устроен пайплайн, и настраивали ли его сами или только смотрели на красный крестик. Для питониста вопрос прикладной: кто-то должен держать линтеры, тесты, сборку образа и прогон миграций, и команда выясняет, придётся ли делать это за вас.
Как отвечать
Разведите два понятия сразу: стадия это этап, джобы внутри одной стадии идут параллельно, а следующая стадия стартует, когда предыдущая прошла целиком. В GitHub Actions ту же роль играют джобы со связью needs, а шаги внутри джобы выполняются последовательно.
Опишите типовой пайплайн и скажите, что из этого настраивали руками:
- линт:
ruffилиflake8, проверка форматирования, проверка типовmypy; - тесты:
pytestс покрытием, база и брокер поднимаются сервисами рядом с джобой, матрица по версиям Python если это библиотека; - сборка: образ собирается и публикуется в реестр с тегом по коммиту;
- выкладка: на тестовое окружение автоматически, на прод по кнопке, с отдельными секретами.
Ценные детали: кэш зависимостей по хэшу файла блокировки, передача отчётов между джобами артефактами, правила запуска (полный прогон на основной ветке, укороченный на ветке разработки), отдельная джоба миграций до выкладки кода.
Где спотыкаются
Называют джобой каждый шаг. Шаги внутри джобы делят одно окружение и файловую систему, а разные джобы уезжают на разные раннеры, поэтому файл, собранный в одной, во второй без артефакта не появится.
Второе: приносят выдуманные проценты ускорения. Фразы вроде «выкатки стали быстрее наполовину» проверяются одним вопросом о том, сколько пайплайн шёл до и сколько идёт сейчас, и обычно ответа не находится.
Третье: не думают про секреты и время прогона. Пароль в незамаскированной переменной утекает в лог сборки, а пайплайн, который идёт полчаса из-за переустановки зависимостей в каждой джобе, команда постепенно начинает обходить.