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

时间:2019-07-05 19:24:12

标签: 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端触发Dockerfile的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

1 个答案:

答案 0 :(得分:1)

可能您无法在Dockerfile之外执行此操作。

但是您可以使用Docker这样的多阶段构建:

decrypt_iv()