Gradle и Docker: Как запустить сборку Gradle в контейнере Docker? - PullRequest
2 голосов
/ 08 апреля 2020

У меня есть следующий docker файл, который запускает spring boot application:

    # For Java 11, try this
    FROM adoptopenjdk/openjdk11:alpine-jre

    #
    ARG JAR_FILE=/build/libs/pokerstats-0.0.1-SNAPSHOT.jar

    #
    WORKDIR /opt/app

    #
    COPY ${JAR_FILE} app.jar

    #
    ENTRYPOINT ["java","-jar","app.jar"]

Проблема в том, что в настоящее время мне нужно сначала запустить gradle clean build на моем хост-компьютере, чтобы создать файл jar на мой локальный компьютер по пути:

/build/libs/pokerstats-0.0.1-SNAPSHOT.jar

Как я могу поместить это gradle clean build в мой docker файл, чтобы шаг сборки был сделан внутри контейнера?

edit:

Я хочу, чтобы шаги для пользователя были:

1. Clone my project from `github`
2. run `docker build -t pokerstats .` - which will do the gradle build
3. run docker container run -d -p 8080:8080 pokerstats

Пользователь будет клонировать мой проект из github - тогда я хочу, чтобы они были возможность запуска контейнера docker без предварительной сборки проекта с помощью gradle - т.е. я хочу, чтобы файл docker выполнил сборку и скопировал jar в контейнер.

1 Ответ

0 голосов
/ 10 апреля 2020

После прочтения этой статьи Я смог решить эту проблему с помощью Multi Stage Docker Build. Пожалуйста, смотрите файл Docker ниже:

# using multistage docker build
# ref: https://docs.docker.com/develop/develop-images/multistage-build/

# temp container to build using gradle
FROM gradle:5.3.0-jdk-alpine AS TEMP_BUILD_IMAGE
ENV APP_HOME=/usr/app/
WORKDIR $APP_HOME
COPY build.gradle settings.gradle $APP_HOME

COPY gradle $APP_HOME/gradle
COPY --chown=gradle:gradle . /home/gradle/src
USER root
RUN chown -R gradle /home/gradle/src

RUN gradle build || return 0
COPY . .
RUN gradle clean build

# actual container
FROM adoptopenjdk/openjdk11:alpine-jre
ENV ARTIFACT_NAME=pokerstats-0.0.1-SNAPSHOT.jar
ENV APP_HOME=/usr/app/

WORKDIR $APP_HOME
COPY --from=TEMP_BUILD_IMAGE $APP_HOME/build/libs/$ARTIFACT_NAME .

EXPOSE 8080
ENTRYPOINT exec java -jar ${ARTIFACT_NAME}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...