Как запустить приложение Springboot с тестом Junit с файлом Docker - PullRequest
0 голосов
/ 25 марта 2020

Прямо сейчас у меня есть Dockerfile, как показано ниже:

FROM openjdk:8-jdk-alpine
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

Что делать, если я хочу запустить тест junit после запуска приложения springboot? Я использую Maven для зависимостей.

Куда поместить эти строки?

mvn test
mvn clean test
mvn clean compile test

Или какие еще команды я должен использовать?

1 Ответ

1 голос
/ 25 марта 2020

Предпосылка: даже если решение ориентировано на ваши особенности, было бы лучше выполнить тесты на этапе сборки целевого jar

Чтобы выполнить тесты на вашем Dockerfile Вы можете выполнить одно из следующих действий:

  1. скопировать также исходные файлы в Dockerfile и выполнить команды тестирования maven. Делая это, вы также можете создать целевой контейнер непосредственно на контейнере, а также вам необходимо установить maven на контейнере.

  2. скопировать только целевой файл jar и используйте его для выполнения ваших тестов, вам нужно включить тестовые классы в целевой jar. (См. Как я могу включить тестовые классы в Maven jar и выполнить их? ).

Независимо от выбранного вами способа, вы можете изменить точку входа для выполнения нескольких команды. Вы можете сделать это в основном двумя способами:

  1. (a) Создание bash сценария , который выполняет ваши команды (см. Несколько команды для docker ENTRYPOINT )
  2. (b) Использование supervisord (см. Как написать файл Docker, который я могу запустить службу и запустить оболочку, а также принять аргументы для оболочки? ). Это лучшее решение для управления процессом, связанным со сроком службы контейнера (таким образом, процесс с PID 1).

Пример

Предположим, вы решили скопировать все исходные файлы (опция 1 ) и использовать для этого скрипт bash (опция 1 (a) ). Создайте команду . sh следующим образом, чтобы прикрепить контейнер к процессу приложения Spring, даже если будет выполнен тест mvn:

#!/bin/bash

#Execute Spring application
CMD="java -jar target/app.jar"
$CMD &
SERVICE_PID=$!

#Execute Tests
mvn test

#Wait for Spring execution
wait "$SERVICE_PID"

Ваш файл Docker будет выглядеть следующим образом:

#Start from maven docker image
FROM maven:3.6.1-jdk-8-alpine

#Copy all sources
COPY . .

#Build ( because you want to execute tests after the spring boot application is started you should disable test during build phase )
RUN mvn install

#Start container
COPY commands.sh /scripts/commands.sh
RUN ["chmod", "+x", "/scripts/commands.sh"]
ENTRYPOINT ["/scripts/commands.sh"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...