gpt4 book ai didi

docker - docker多阶段构建期间的Gradle依赖项缓存?

转载 作者:行者123 更新时间:2023-12-02 21:04:16 25 4
gpt4 key购买 nike

我有以下 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"]

我的目标是在每次构建 docker 镜像时防止 gradle 下载依赖项。

命令 gradle dependencies下载所有必需的 Java 库,以防它们丢失。

gradle dependencies命令我只复制了 build.gradle 以便只下载依赖项并缓存它们。

当我运行 gradle build命令,为什么要重新下载所有文件?它们已经存在于其中一层中。

我试过 RUN gradle clean build --info || return 0而不是 gradle dependencies , 全部都一样。

最佳答案

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"]

这是我的 original Dockerfile .我已经为你修改了它,但还没有测试它,所以如果你有疑问,你可以引用原文。

关于docker - docker多阶段构建期间的Gradle依赖项缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59007208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com