02
Приёмка воспроизводимости: образ, зависимости и артефакт
На первом сценарии команда должна взять не учебный образ, а существующую CI-нагрузку с типичными закрытыми зависимостями. Это позволяет проверить не сам факт запуска контейнера, а пригодность Apple container для реального корпоративного процесса.
В рабочем журнале фиксируются источник образа, digest, способ аутентификации, версии зависимостей и контрольная сумма результата. Указание только тега вроде latest недостаточно: повторный запуск может получить другой слой, и тогда различие результата нельзя будет связать с кодом.
Проверка выполняется последовательно:
- получить OCI-образ из внутреннего реестра и сохранить журнал аутентификации без секретов;
- запустить задачу с теми же переменными, которые разрешены в обычном CI;
- собрать или протестировать зависимость в чистом рабочем каталоге;
- сохранить логи, список созданных файлов и контрольные суммы артефактов;
- повторить задание без изменения исходного коммита;
- удалить или заменить рабочую область и повторить запуск;
- перезапустить узел, после чего проверить восстановление сервиса, кэша и очереди;
- сопоставить результаты холодного старта, повторного запуска и запуска после перезагрузки.
Мы не должны объявлять время выполнения или коэффициент ускорения без журнала реальных измерений. Для корпоративной приёмки важнее установить, исчезают ли скрытые зависимости: локальный кэш разработчика, случайный файл в рабочем каталоге, доступ к домашней директории или незадокументированная переменная окружения.
Официальный README версии 1.3.0 описывает работу с Linux-контейнерами и образами; именно его следует использовать как источник возможностей релизной версии, а не описание ветки main README Apple container 1.3.0.
Критерии повторяемого результата
Приёмка считается положительной только тогда, когда команда может ответить на четыре вопроса:
- одинаков ли набор входных слоёв при повторном запуске;
- можно ли восстановить задачу после очистки рабочей области;
- сохраняется ли ожидаемый артефакт после перезагрузки узла;
- понятно ли, какой компонент отвечает за отличие результата.
Если ответ отрицательный, контейнерный job не следует немедленно переводить в общий production-пул. Сначала нужно закрепить digest, описать кэширование и сделать рабочую директорию одноразовой. Это особенно важно для проектов, где Linux-подзадача формально независима, но фактически получает файлы из macOS workspace.