在Docker化的开发环境中,“构建工件”是什么意思?

24
在一篇关于创建基于Docker的开发环境的博客文章中,有一个部分提出了以下问题和第一段回答:

你需要什么类型的构建产物?

在这个例子中,我想要一个运行中的容器作为构建产物。Compose或者Docker都可以作为达成这个目标的工具。在你的场景中,你可能更喜欢拥有可分发的镜像,或者你可能希望构建在你的主机操作系统上生成一个二进制文件。

另一个问题中得知,“artifact”是指在一个过程中创建的任何东西。从其他答案中可以看出,使用该术语的上下文很重要。
在使用Docker创建开发环境的情况下,“build artifact”是什么意思?
2个回答

24

简言之,我想说的是:环境 + 编译输出 = 构件

也就是说,完整的开发环境,包括所有构建源代码所需的工具、依赖等(镜像),以及由此构建/编译出来的可执行文件 / 库,后者存储在前者中!

这样,在出现崩溃/错误的情况下,无论该问题发生在软件的哪个版本上,您都可以调试它,因为一切都在那里供您使用。 *

*:上述描述中我没有包含源代码,但有时候也许需要。否则,既然我们都使用版本控制,如果有必要,它可以随后挂载。

构件 vs 镜像:

(注释中的说明)

“构件”只是指开发软件时产生的副产品;在这种情况下,可执行文件 / 库是编译源代码时产生的构件,而镜像是整个“构建”步骤产生的构件,基本上是包含一个或多个其他构件的构件!

当你开始使用自动化构建、测试和部署流水线(也称为持续交付)时,这将变得更有意义。


注1:

这将是最终结果,因此你选择设置任何步骤直到这一点是由你决定的(分离镜像方法等)。

注2:

我最近刚开始尝试使用Docker与持续交付,所以这些只是我最初的想法 :)


谢谢你的意见 :) 然后,“artifact”和“image”的区别是什么?你的定义听起来很像“image”。 - mbigras
2
在这种情况下,图像就是艺术品! :) “Artifact”仅仅是一个词,用于描述开发软件时产生的副产品。因此,可运行文件/库是编译源代码时生成的“artifact(s)”,而image则是整个“build”步骤生成的艺术品,基本上是包含一个或多个其他“artifact(s)”的艺术品!当您开始使用自动化构建、测试和部署流水线(也称为Continuous Delivery)时,这将更有意义。 - helmesjo
1
@helmesjo 我建议你把你评论中的例子加到你的答案里,这样对我来说更清晰明了 :) - gdvalderrama
1
@guival 当然可以!我已经更新了答案。如果它变得更加(或更少)令人困惑,请告诉我... :) - helmesjo

5

就构建流水线而言,Artifact是在构建过程中生成的软件组件,存储在仓库中,最终部署到不同的环境中。

对于非docker化的Java应用程序,通常是JAR/WAR文件。 对于docker化的应用程序,通常是包含JAR/WAR文件的镜像。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接