Информация

Дата основания
Местоположение
Россия
Сайт
otus.ru
Численность
51–100 человек
Дата регистрации

Блог на Хабре

Обновить
Комментарии 5

Есть еще вариант. Самое долго в сборке питон-контейнера (да и рубей кстати тоже) является скачивание и установка пакетов. Если закешировать их локально (и пробросить папку с кешом в dind) — все станет гораздо веселее.

А если у вас больше одного проекта для сборки и целый пул GitLab-раннеров, то вы как себе это представляете?

Собственно, и у NPM или NuGet абсолютна такая же история. Наиболее затратным является скачивание и утановка пакетов.

Я себе это представляю конечно же плохо, но на стековерфлоу были ответы с NFS-разделом смонтированным внутрь dind. Еще вариант — использовать кешируший прокси именно для скачивания пакетов.

В случае alpine Вы пропустили ещё один долгий этап — компиляцию. Т.к. он использует musl вместо glibc, то приходится компилировать C-компоненты заново, использовать скомпилированные версии из wheel уже не получится. Так что выгода alpine для более-менее серьёзного python проекта уже сомнительна.

Недавно на работе проводил сравнение alpine vs slim. Получилось, что slim в 2 раза быстрее собирается, но весит в 1.5 раза больше. Возможно, можно его ещё уменьшить, но пока и это устроило.

К сожалению, я не пишу на питоне, и не увижу каких-то дополнительных подводных камней, но в своих Java и JS проектах я использую другой подход. Делюсь:
Вместо того, чтобы запускать с помощью CI сборку докером, а докером запускать сборку питоном, можно всё это дело "вынести вверх". Сделать свой образ для сборки, $CI_REGISTRY_IMAGE/tooling:latest, установить в него все нужные для сборки инструменты и docker cli (чтобы не запускать dind). Докерфайл для его сборки положить в корень в папку tooling и джобу запускать при only.changes в ней. Пушим в регистри.
Далее уже выполняем сборку приложения джобой, у которой image: $CI_REGISTRY_IMAGE/tooling:latest. Тут уже можно легко использовать кеширование зависимостей, например у меня и maven и gradle целиком сохраняют все свои пакеты между запусками. После выполнения основного скрипта собираем докером образ из полученных артефактов и пушим, куда надо.

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.