簡體   English   中英

如何使用帶有 Docker 文件的 Junit 測試運行 Springboot 應用程序

[英]How to run Springboot application with Junit test with Docker File

現在我的 Dockerfile 如下:

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

如果我想在啟動 springboot 應用程序后運行一些 junit 測試怎么辦? 我正在使用 Maven 作為依賴項。

我應該把這些線放在哪里?

mvn test
mvn clean test
mvn clean compile test

或者我應該使用哪些其他命令?

前提:即使解決方案針對您的具體情況,最好在目標 jar 構建階段執行測試

要對 Dockerfile 執行測試,您可以執行以下操作之一:

  1. 復制 Dockerfile 上的源文件並執行 maven 測試命令。 這樣做你也可以直接在容器上構建你的目標 jar 並且你需要在容器上安裝maven

  2. 只復制目標 jar 文件並使用它來執行您需要在目標 jar 上包含測試類的測試。 (請參閱如何將測試類包含到 Maven jar 中並執行它們? )。

無論您選擇哪種方式,您都可以修改入口點以執行多個命令。 您基本上可以通過兩種方式做到這一點:

  1. (a)創建一個執行命令的bash 腳本(參見docker ENTRYPOINT上的多個命令
  2. (b)使用supervisord (參見如何編寫 Dockerfile,我可以啟動服務並運行 shell 並接受 shell 的參數? )。 這是一個更好的解決方案,可以管理與容器壽命相關的過程(因此是 PID 1 的過程)。

例子

假設您選擇復制所有源文件(選項1 )並使用 bash 腳本(選項1(a) )來執行此操作。 如下創建command.sh文件,以便將容器附加到 Spring 應用程序進程,即使將執行 mvn test:

#!/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"

您的 Dockerfile 將如下所示:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM