Почему вывод моего проекта, который использует docker build для публикации пользовательского образа Debian, различается при запуске локально и в GitHub Actions?

У меня возникла проблема в рамках моего проекта, связанного с созданием пользовательского образа Debian с помощью Docker. Я прохожу курс “от 0 до Linux админа” здесь: https://yodo.im/courses/linux/?v=1d20b5ff1ee9, и столкнулся с вопросом.

У меня есть проект, который берет последнюю минимальную снимок Debian с debian.org и после применения последовательности команд в Dockerfile и shell-скриптов генерирует сжатый образ (gzip). Этот образ можно записать на диск с помощью Rufus или аналогичных инструментов, и он будет готов для загрузки на совместимом оборудовании.

Однако я заметил странную проблему. Когда я запускаю сборку локально в Git Bash, выходной образ работает корректно, но при запуске на GitHub Actions конечный образ не загружается и выдает ошибку. Существующая ошибка на экране загрузки:

Ошибка загрузки

Помогите, пожалуйста, понять, чем может отличаться выполнение проекта в локальном Git Bash от GitHub Actions. Вот как выглядит мой процесс сборки на GitHub:

linux-os.yml
    -> build.sh (*использует Dockerfile и вызывает методы из buildhelper.sh*)
        -> buildhelper.sh (*содержит все методы, такие как docker build*)
            -> squash-me.sh (*содержит методы для настройки корневого раздела ОС*)

Этот поток полностью выполняется в GitHub Actions. Однако в локальном Git Bash я просто вызываю build.sh. Судя по характеру ошибки на экране загрузки, похоже, что что-то странное происходит при вызове squash-me.sh в GitHub Actions, из-за чего корневой раздел не загружается во время загрузки.

Привет!

Понимаю, что проблемы с образами в Docker могут быть довольно запутанными, особенно когда они работают в локальной среде, но не удаются в CI/CD, таком как GitHub Actions. Давай попробуем разобраться, что может быть не так.

Различия между локальным окружением и GitHub Actions

  1. Среда выполнения:

    • В GitHub Actions для запуска используется контейнеризированная среда, которая может отличаться от твоей локальной системы. Убедись, что версии Docker и базового образа Debian совпадают.
  2. Архитектура:

    • Убедись, что версия образа, которую ты используешь для сборки, совместима с архитектурой оборудования, на котором ты пытаешься запустить образ. Например, если ты создаёшь образ для x86_64, а запускаешь на ARM, это может вызвать проблемы.
  3. Урупления:

    • В GitHub Actions могут отсутствовать некоторые зависимости, которые есть на твоем локальном компьютере. Проверь, установлены ли все нужные пакеты и зависимости в buildhelper.sh и других скриптах.
  4. Логи и отладка:

    • Обязательно добавь больше логирования в squash-me.sh, чтобы увидеть, успешно ли выполняются все команды. Возможно, ты пропустил важный шаг, который работает локально, но не работает в контексте GitHub Actions.
  5. Права доступа:

    • Проверяй, достаточно ли прав у GitHub Actions для выполнения всех команд, особенно связанных с доступом к файловой системе или сетевыми ресурсами.

Что делать дальше

  • Попробуй запустить сборку на своем локальном компьютере так же, как это происходит на GitHub Actions. Вызывай build.sh из командной строки, имитируя окружение CI, чтобы увидеть, сохраняется ли проблема.

  • Сравни выводы обеих сборок (локальной и CI). Это может помочь понять, на каком этапе происходит сбой.

  • Если возможно, добавь шаги для вывода структуры файловой системы и конфигурации в GitHub Actions, чтобы видеть, что именно происходит на этом этапе.

Если после этих шагов у тебя все еще будут проблемы, дай знать! Будем разбираться дальше. Удачи с проектом! :four_leaf_clover: . Я ответил на ваш вопрос?

Спасибо за ответ! Я разобрался с проблемой и у меня все получилось.

Отлично, рад слышать, что ты разобрался с проблемой! :tada: Если будут еще вопросы или понадобится помощь, не стесняйся обращаться. Удачи! . Я ответил на ваш вопрос?