Существует несколько способов обработки зависимостей между заданиями / этапами сборки.
кэширование , руководство доступно здесь.
например, секция кэша для м2
# Cache modules in between jobs
cache:
key: ${CI_COMMIT_REF_SLUG} # cache is for per branch
paths:
- ${CI_PROJECT_DIR}/.m2
Кэширование
также может быть выполнено с использованием чего-то вроде minio (с открытым исходным кодом s3, как решение для хранения данных). Интеграция с руководством gitlab доступна здесь . Но поскольку кэширование требует архивирования и распаковки большого количества артефактов, это может привести к замедлению (но, очевидно, гораздо быстрее, чем без кэширования). Чтобы избежать этой проблемы, можно использовать тома Docker.
Объем докера
В основном мы можем использовать готовый том док-станции, скажем ~/.m2
, смонтированный из местоположения хост-машины. Если вы используете в кластере kubernetes, вы можете использовать для этого решения kubnernets volume . Вы должны настроить свой бит образа сборки для поддержки dir зависимости монтирования, ниже приведен пример образа сборки mvn. Этот подход лучше, потому что вы не можете кэшировать вне вашей директории сборки.
например. изображение докера
FROM maven:3.5.4-jdk-8
# m2 dir on docker container
ENV MAVEN_OPTS "-Dmaven.repo.local=/.m2/repository"
ENV MAVEN_CLI_OPTS "-s /usr/local/.m2/settings.xml --batch-mode"
ADD .m2 /usr/local/.m2 # copy settings.xml to build image
# same as the m2 dir specified in MAVEN_OPTS
VOLUME /.m2
Артефакты
Если вы просто хотите передать свой каталог сборки, например /target
, вы можете использовать решение для артефактов gitlab, руководство доступно здесь .