spring-boot - 如何在Heroku上的Docker构建之前执行gradle构建?

标签 spring-boot docker gradle github heroku

当在github上提交提交时,我想在Heroku平台上部署使用gradle构建的dockerized Spring-Boot应用程序。

  • 通过在本地构建镜像,然后将其部署为
  • ,我通过CLI成功部署了docker镜像
  • 我使用“heroku-18”堆栈成功地“在github push上”部署了。每次提交后,Heroku都会检测到我的项目是gradle项目,可以毫无问题地构建并部署它。此方法不会触发Docker。

  • 现在,我想切换到“容器”堆栈,让Heroku构建我的Dockerfile并在每次提交后部署我的应用程序。可以正确检测到Dockerfile,但是由于未生成JAR,因此Dockerfile步骤失败。

    如何在Heroku端触发Docker文件的JAR生成,以便能够将此JAR复制到容器?

    Heroku日志
    === Fetching app code
    === Building web (Dockerfile)
    Sending build context to Docker daemon  50.69kBStep 1/11 : FROM openjdk:11-jre-slim
    11-jre-slim: Pulling from library/openjdk
    ...
    Step 4/11 : ADD build/libs/myapp-1.0-SNAPSHOT.jar /app/myapp.jar
    ADD failed: stat /var/lib/docker/tmp/docker-builder545575378/build/libs/myapp-1.0-SNAPSHOT.jar: no such file or directory
    

    heroku.yml
    build:
      docker:
        web: Dockerfile
    
    

    Dockerfile
    FROM openjdk:11-jre-slim
    VOLUME /var/log/my-app
    ARG JAR_FILE
    ADD build/libs/my-app-1.0-SNAPSHOT.jar /app/my-app.jar
    RUN chgrp -R 0 /app
    RUN chmod -R g+rwX /app
    RUN chgrp -R 0 /var/log/my-app
    RUN chmod -R g+rwX /var/log/my-app
    CMD [ "-jar", "/app/my-app.jar" ]
    ENTRYPOINT ["java"]
    EXPOSE 8080
    

    最佳答案

    可能您无法在Dockerfile之外执行此操作。
    但是您可以使用Docker这样的多阶段构建:

    FROM adoptopenjdk/openjdk14-openj9:alpine as build
    COPY . /opt/app/src
    WORKDIR /opt/app/src
    RUN ./gradlew clean bootJar
    
    FROM adoptopenjdk/openjdk14-openj9:alpine-jre
    COPY --from=build opt/app/app.jar /opt/app/app.jar
    CMD ["java", "-server", "-XX:MaxRAM=256m", "-jar", "/opt/app/app.jar"]
    

    关于spring-boot - 如何在Heroku上的Docker构建之前执行gradle构建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56908333/

    相关文章:

    spring-boot - 带有 Maven Shade 插件的 Spring Boot - Controller 未映射(404 错误)

    spring - 无法解析 OpenID 配置 spring boot(安全)java.net.ConnectException : Connection refused: connect

    android - 带有美元符号的 Gradle 错误

    eclipse - 如何允许/解决嵌套复合Gradle构建

    java - Spring Cloud 配置无法加载 native 配置文件,除非文件名是 application

    angular - 使用 Gradle 的 spring bootRun 和 Angular buildWatch

    docker ps-显示图像ID而不是名称

    docker - 无法通过主机上的已发布端口访问 Docker Swarm 服务

    docker - 从本地开发kubernetes集群中的Pod连接到Docker Compose服务的最佳可移植方法

    groovy - 包括gradle中的依赖