如何在Docker建立Heroku之前执行Gradle构建



我想在github上推动提交时在Heroku平台上部署使用Gradle构建的Dockerized Spring-Boot应用程序。

  • 我通过在本地构建图像,然后部署它,成功地用CLI部署了Docker映像
  • 我用" Heroku-18"堆栈成功地"在Github Push"上部署了。每次提交后,Heroku都会发现我的项目是一个Gradle,构建并毫无问题地部署它。此方法不会触发Docker。

现在,我想切换到"容器"堆栈,供Heroku构建我的Dockerfile并在每个提交后部署我的应用程序。正确检测到dockerfile,但是由于未生成罐子,因此dockerfile步骤失败。

如何触发heroku侧的罐子的产生,以使dockerfile能够将此罐子复制到容器中?

Heroku Logs

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