Написание конфигурации на начальном этапе может вызывать трудности из-за того, что при выполнении инструкций сборки какой-либо стадии не до конца понятно состояние системы в сборочном контейнере.
Благодаря опциям интроспекции вы можете получить доступ к конкретной стадии непосредственно в процессе сборки.
Во время интроспекции вы получаете такое же состояние контейнера, как и во время сборки, с теми же переменными окружения, с доступом к тем же служебным инструментам, используемым werf во время сборки.
Эти служебные инструменты добавляются с помощью монтирования директорий из специального служебного контейнера — stapel (доступен по адресу /.werf/stapel
в сборочном контейнере). По сути, интроспекция, — это запуск сборочного контейнера в интерактивном режиме для работы в нем пользователя.
Параметр --introspect-stage
может быть указан несколько раз для интроспекции нескольких стадий. Формат использования:
IMAGE_NAME/STAGE_NAME
для интроспекции стадииSTAGE_NAME
образа или артефактаIMAGE_NAME
. Безымянный образ можно указать как~
.;STAGE_NAME
или*/STAGE_NAME
для интроспекции всех существующих стадий с именемSTAGE_NAME
.
Во время разработки, использование интроспекции позволяет сначала получить результат в сборочном контейнере, а затем перенести необходимые шаги и инструкции в конфигурацию соответствующей стадии. Такой подход удобен и позволяет быстрее достичь результата, когда вам понятно что должно быть в итоге, но сами шаги процесса не очевидны и требуют некоторых экспериментов и проверок.
Во время отладки, использование интроспекции позволяет быстрее понять, почему сборка завершилась с ошибкой, или полученный результат неожиданный. Вы можете также проверить содержимое необходимых файлов на какой-либо стадии сборки, либо проверить состояние системы.
Наконец, при использовании интроспекции для приложений с Ansible, вы можете отлаживать Ansible-плейбуки в сборочном контейнере, а затем переносить их на необходимые стадии конфигурации сборки.