Кеширование зависимостей Gradle во время многоступенчатой ​​сборки докеров?

У меня есть следующий файл Dockerfile

FROM gradle:jdk13 AS appbuild
WORKDIR "/home/gradle/"
COPY --chown=gradle:gradle "./build.gradle" "/home/gradle/"
RUN gradle dependencies
COPY --chown=gradle:gradle "./src/" "/home/gradle/src/"
RUN gradle build --info

FROM openjdk:13
ENV LANG en_US.UTF-8
COPY --from=appbuild "/home/gradle/build/libs/frontend.jar" "/frontend.jar"
CMD ["java", "-jar", "-Dspring.profiles.active=default", "/frontend.jar"]

Моя цель - предотвратить загрузку зависимостей Gradle каждый раз, когда я создаю образ докера.

Команда gradle dependencies загружает все необходимые java-библиотеки в случае их отсутствия.

Перед первым gradle dependencies Я скопировал build.gradle только для того, чтобы загрузить зависимости и кэшировать их.

Когда я запускаю gradle buildкоманда, почему она хочет снова загрузить все файлы? Они уже присутствуют в одном из слоев.

Я пробовал с RUN gradle clean build --info || return 0 вместо того gradle dependencies, все так же.

1 ответ

Решение

В GRADLE_USER_HOMEпеременная окружения не установлена ​​по умолчанию. Вам нужно будет явно установить его, а затем скопировать загруженные зависимости на следующем этапе.

FROM gradle:jdk13 AS cache
WORKDIR /app
ENV GRADLE_USER_HOME /cache
COPY build.gradle gradle.properties settings.gradle ./
RUN gradle --no-daemon build --stacktrace

FROM gradle:jdk13 AS builder
WORKDIR /app
COPY --from=cache /cache /home/gradle/.gradle
COPY src/ src/
RUN gradle --no-daemon build --stacktrace

FROM openjdk:jre-alpine
WORKDIR /app
RUN apk --no-cache add curl
COPY --from=builder /app/build/libs/frontend.jar /frontend.jar
ENV PORT 80
EXPOSE 80
HEALTHCHECK --timeout=5s --start-period=5s --retries=1 \
    CMD curl -f http://localhost:$PORT/health_check
CMD ["java", "-jar", "-Dspring.profiles.active=default", "/frontend.jar"]

Вот мой оригинальный файл Dockerfile. Я модифицировал его для вашего, но не тестировал, поэтому вы можете обратиться к оригиналу, если сомневаетесь.

Другие вопросы по тегам