Написание конфигурации на начальном этапе может вызывать трудности из-за того, что при выполнении инструкций сборки какой-либо стадии не до конца понятно состояние системы в сборочном контейнере.

Благодаря опциям интроспекции вы можете получить доступ к конкретной стадии непосредственно в процессе сборки. Во время интроспекции вы получаете такое же состояние контейнера, как и во время сборки, с теми же переменными окружения, с доступом к тем же служебным инструментам, используемым werf во время сборки. Эти служебные инструменты добавляются с помощью монтирования директорий из специального служебного контейнера — stapel (доступен по адресу /.werf/stapel в сборочном контейнере). По сути, интроспекция, — это запуск сборочного контейнера в интерактивном режиме для работы в нем пользователя.

Параметр --introspect-stage может быть указан несколько раз для интроспекции нескольких стадий. Формат использования:

  • IMAGE_NAME/STAGE_NAME для интроспекции стадии STAGE_NAME образа или артефакта IMAGE_NAME. Безымянный образ можно указать как ~.;
  • STAGE_NAME или */STAGE_NAME для интроспекции всех существующих стадий с именем STAGE_NAME.

Во время разработки, использование интроспекции позволяет сначала получить результат в сборочном контейнере, а затем перенести необходимые шаги и инструкции в конфигурацию соответствующей стадии. Такой подход удобен и позволяет быстрее достичь результата, когда вам понятно что должно быть в итоге, но сами шаги процесса не очевидны и требуют некоторых экспериментов и проверок.

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

Наконец, при использовании интроспекции для приложений с Ansible, вы можете отлаживать Ansible-плейбуки в сборочном контейнере, а затем переносить их на необходимые стадии конфигурации сборки.