gpt4 book ai didi

Java docker 文件。构建并测试还是只运行 jar 文件?

转载 作者:行者123 更新时间:2023-11-29 08:34:31 30 4
gpt4 key购买 nike

我在 CI 管道中考虑这一点,我应该首先构建和测试我的应用程序,结果应该是一个 docker 镜像。

我想知道使用构建环境在构建服务器上构建然后运行测试是否更常见。也许为此使用构建脚本。最后只需将 jar 文件添加到使用 COPY 生成的 Docker 容器中,然后使用 Entrypoint java -jar .jar。因此,保持 Dockerfile 非常小,并在容器外进行测试和构建。

有点像这样:

FROM openjdk:8-jre-alpine
CMD java ${JAVA_OPTS} -jar *.jar
COPY build/libs/*.jar .

或者,如果我应该将所有源代码添加到容器中,构建它,然后在容器内运行测试,然后让入口点(像以前一样)运行生成的 jar 文件?那么将所有内容都保存在 Dockerfile 中?也许还做一些清理,删除源代码

我猜这不一定是 Java,同样的问题适用于所有语言

最佳答案

优化容器构建

从历史上看,人们被迫运行 Docker 两次以创建不包含源代码(以及用于创建二进制文件的软件)的 docker 镜像。例如,请参见

现在,Docker 支持新的多阶段构建功能:

这使 Docker 能够使用包含构建工具的图像构建容器,但输出仅包含运行时依赖项的图像。下面的例子演示了这个概念,注意 jar 是如何从第一个构建阶段的目标目录复制的

FROM maven:3.3-jdk-8-onbuild 

FROM java:8
COPY --from=0 /usr/src/app/target/demo-1.0-SNAPSHOT.jar /opt/demo.jar
CMD ["java","-jar","/opt/demo.jar"]

生成的图像不包含 maven,仅包含 java 和构建的 jar。

测试

假设我们不是在谈论单元测试(可以在本地运行),集成测试需要先部署代码。这种情况下的答案在很大程度上取决于您如何部署容器化 Java 应用程序。

例如,如果您使用的是 Kubernetes 或 Openshift,一种选择是使用 Fabric8 plugin在 Maven 中运行测试阶段之前部署代码。

关于Java docker 文件。构建并测试还是只运行 jar 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45353790/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com