Мы закрепили нашу сборку maven, чтобы мы могли запускать ее из наших jenkins без установки множества зависимостей, специфичных для сборки, на машине jenkins (зависимости Java, redis, maven и т. д.). Наша сборка основана на инкрементальных сборках Docker, которые выполняют только те шаги, которые действительно требуют повторного запуска.
Наша основная сборка — это DockerFile, в котором есть несколько шагов для установки jdk, maven, и т. д. Затем он выполняет
Код: Выделить всё
COPY ./pom.xml /opt/inbot-api/pom.xml
RUN mvn dependency:copy-dependencies clean
Это загрузит зависимости в локальный репозиторий maven, а затем очистит целевой каталог.
Затем копируем дерево исходников в образ и запускаем полную сборку.
Код: Выделить всё
COPY ./src /opt/inbot-api/src
RUN mvn -e clean install
В нашем DockerFile есть еще много чего, что здесь не так важно, но в конечном итоге он создает файл docker с нашими скомпилированными артефактами, конфигурацией nginx. и все наши зависимости времени выполнения, которые мы можем развернуть в ECS.
Это почти работает, за исключением того, что чистая установка mvn по-прежнему загружает дополнительные зависимости плагина при каждой сборке. Итак, это зависимости, которые не рассматриваются на этапе копирования зависимостей.
Мой вопрос: как мне получить RUN mvn Dependency:copy-зависимости очистить для загрузите все зависимости, включая зависимости плагина. Я видел, как люди на самом деле выполняли очистку mvnverify вместо mvn dependency:copy-dependents clean, но в нашем случае это довольно медленно. Мне интересно, есть ли лучший способ сделать это.
Буду признателен за любые отзывы о том, как это улучшить.
Обновление
Сейчас я делаю
Код: Выделить всё
RUN mvn -B -T 4 dependency:copy-dependencies dependency:resolve-plugins dependency:go-offline clean
Подробнее здесь: https://stackoverflow.com/questions/342 ... pendencies