Docker教程 · 2024年11月11日

运行您的 Java 测试

运行您的 Java 测试

开始,完成本指南前面的所有部分 。

测试是现代软件开发的重要组成部分。测试对于不同的开发团队来说意味着很多事情。有单元测试、集成测试和端到端测试。在本指南中,您将了解如何在 Docker 中运行单元测试。

在以下示例中,您会将测试命令拉入 Dockerfile 中。将 Dockerfile 的内容替换为以下内容。


# syntax=docker/dockerfile:1  FROM eclipse-temurin:17-jdk-jammy as base WORKDIR /build COPY --chmod=0755 mvnw mvnw COPY .mvn/ .mvn/  FROM base as test WORKDIR /build COPY ./src src/ RUN --mount=type=bind,source=pom.xml,target=pom.xml \  --mount=type=cache,target=/root/.m2 \  ./mvnw test  FROM base as deps WORKDIR /build RUN --mount=type=bind,source=pom.xml,target=pom.xml \  --mount=type=cache,target=/root/.m2 \  ./mvnw dependency:go-offline -DskipTests  FROM deps as package WORKDIR /build COPY ./src src/ RUN --mount=type=bind,source=pom.xml,target=pom.xml \  --mount=type=cache,target=/root/.m2 \  ./mvnw package -DskipTests && \  mv target/$(./mvnw help:evaluate -Dexpression=project.artifactId -q -DforceStdout)-$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout).jar target/app.jar  FROM package as extract WORKDIR /build RUN java -Djarmode=layertools -jar target/app.jar extract --destination target/extracted  FROM extract as development WORKDIR /build RUN cp -r /build/target/extracted/dependencies/. ./ RUN cp -r /build/target/extracted/spring-boot-loader/. ./ RUN cp -r /build/target/extracted/snapshot-dependencies/. ./ RUN cp -r /build/target/extracted/application/. ./ CMD [ "java", "-Dspring.profiles.active=postgres", "-Dspring-boot.run.jvmArguments='-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000'", "org.springframework.boot.loader.launch.JarLauncher" ]  FROM eclipse-temurin:17-jre-jammy AS final ARG UID=10001 RUN adduser \  --disabled-password \  --gecos "" \  --home "/nonexistent" \  --shell "/sbin/nologin" \  --no-create-home \  --uid "${UID}" \  appuser USER appuser COPY --from=extract build/target/extracted/dependencies/ ./ COPY --from=extract build/target/extracted/spring-boot-loader/ ./ COPY --from=extract build/target/extracted/snapshot-dependencies/ ./ COPY --from=extract build/target/extracted/application/ ./ EXPOSE 8080 ENTRYPOINT [ "java", "-Dspring.profiles.active=postgres", "org.springframework.boot.loader.launch.JarLauncher" ]

首先,您添加了一个新的基础阶段。在基础阶段,您添加了测试和 deps 阶段都需要的通用指令。

test接下来,您添加了一个基于基础阶段标记的新测试阶段。在此阶段,您复制了必要的源文件,然后指定RUN运行 ./mvnw testCMD您过go没有使用 ,而是RUN运行测试。原因是该CMD指令在容器运行时运行,而该RUN 指令在构建镜像时运行。使用时RUN,如果测试失败,构建将失败。

最后,您将 deps 阶段更新为基于基础阶段,并删除了基础阶段中现在的指令。

运行以下命令以测试阶段为目标构建新镜像并查看测试结果。包括--progress=plain查看构建输出、--no-cache确保测试始终运行以及--target-test针对测试阶段。

现在,构建您的映像并运行测试。您将运行该docker build命令并添加--target test标志,以便专门运行测试构建阶段。


$ docker build -t java-docker-image-test --progress=plain --no-cache --target=test . 

您应该看到包含以下内容的输出


...  #15 101.3 [WARNING] Tests run: 45, Failures: 0, Errors: 0, Skipped: 2 #15 101.3 [INFO] #15 101.3 [INFO] ------------------------------------------------------------------------ #15 101.3 [INFO] BUILD SUCCESS #15 101.3 [INFO] ------------------------------------------------------------------------ #15 101.3 [INFO] Total time: 01:39 min #15 101.3 [INFO] Finished at: 2024-02-01T23:24:48Z #15 101.3 [INFO] ------------------------------------------------------------------------ #15 DONE 101.4s 

在本部分中,您学习了如何在构建映像时运行测试。

相关信息:

在下一节中,您将了解如何使用 GitHub Actions 设置 CI/CD 管道。