который собирается через werf из докерфайла на гитлабе, сборка через werf build --repo, и вот сама сборка в докерфайле через mvn clean package, и каждый раз при отработке пайплайна оно заново переустаналивливает все зависимости, есть ли варик как то закэшировать результат установки зависимостей и не повторять его из раза в раз?
Переписать на стейджи?)
я дико извиняюсь, но как ето граммотно сделать в рамках мавена? Бо сейчас оно на выходе дает jarник, и этот джарник уже копируется в финальный образ, надо разделить установку зависимостей и компиляцию?
Можно использовать stapel для этих целей. (1) Переиспользовать кэш сборки x при последующих сборках, сбрасывать кэш раз в месяц: image: maven-build ... git: - add: / to: /app stageDependencies: setup: "**/*" shell: installCacheVersion: {{ div .Commit.Date.Unix (mul 60 60 24 30) }} install: cd /app && mvn -B -s settings.xml clean package -T 1C -DskipTests setup: cd /app && mvn -B -s settings.xml clean package -T 1C -DskipTests --- image: final ... import: - image: maven-build add: <path>/target/<jar-name>-*.jar to: /app/bin/<jar-name>.jar before: setup (2) или использовать монтирование. p.s. пока так, но уже скоро мы планируем реализовать распределённый кэш (хранится, версионируется подобно стадиям), который будет работать для пользователя подобно монтированию.
Понял, спасибо за информацию
Второй способ рабочий, но не рекомендуемый и со своими очевидными недостатками. То, что в p.s., это уже третий способ, эффективный и правильный по всем признакам. А что надо учитывать для multi-stage?
Да, я хотел про третий способ поговорить
Насколько я помню, в верфи buildkit отключён, а без него в простом докере были ложные пересборки (играл роль порядок объявления стейджа)
Buildkit по умолчанию включён, но можно выключить. Известных проблем по этой теме не имеем.
Обсуждают сегодня