Найти в Дзене
VarNote

Словил интересный баг в GitLab CI, делюсь кейсом

Словил интересный баг в GitLab CI, делюсь кейсом. 💡 Пайплайн, который работал годами, внезапно упал с ошибкой об отсутствующем пакете. При этом пакет был на месте в package.json, а Dockerfile давно никто не редактировал. Проблема: Для кэширования и ускорения последующих сборок было две задачи: - в одной задаче создавалась папка node_modules от пользователя root. - в следующей задаче она копировалась в образ, где работа шла от пользователя node. Но папка так и оставалась принадлежать root. Почему это работало несколько лет, а потом перестало — для меня до сих пор загадка. Скорее всего, старая версия Docker (или самого раннера) закрывала на это глаза. Решение: Проблема решилась очень просто — добавлением флага --chown=node:node к команде COPY в Dockerfile. Эта команда меняет владельца папки и файлов прямо в процессе копирования: COPY --chown=node:node ./node_modules ./node_modules Мораль: Не используйте root в Docker. Это и небезопасно, и может внезапно всё сломать, как показывает

Словил интересный баг в GitLab CI, делюсь кейсом. 💡

Пайплайн, который работал годами, внезапно упал с ошибкой об отсутствующем пакете. При этом пакет был на месте в package.json, а Dockerfile давно никто не редактировал.

Проблема:

Для кэширования и ускорения последующих сборок было две задачи:

- в одной задаче создавалась папка node_modules от пользователя root.

- в следующей задаче она копировалась в образ, где работа шла от пользователя node. Но папка так и оставалась принадлежать root.

Почему это работало несколько лет, а потом перестало — для меня до сих пор загадка. Скорее всего, старая версия Docker (или самого раннера) закрывала на это глаза.

Решение:

Проблема решилась очень просто — добавлением флага

--chown=node:node к команде COPY в Dockerfile. Эта команда меняет владельца папки и файлов прямо в процессе копирования:

COPY --chown=node:node ./node_modules ./node_modules

Мораль: Не используйте root в Docker. Это и небезопасно, и может внезапно всё сломать, как показывает практика.

Лучше сразу создать отдельного пользователя и выполнять все команды от его имени. 👨‍💻

varnote | #varnote #docker #gitlabci #case