在 dockerized 开发环境的上下文中,“构建工件”是啥意思?

Posted

技术标签:

【中文标题】在 dockerized 开发环境的上下文中,“构建工件”是啥意思?【英文标题】:What does "build artifact" mean in the context of a dockerized development environment?在 dockerized 开发环境的上下文中,“构建工件”是什么意思? 【发布时间】:2017-07-17 16:54:30 【问题描述】:

在关于创建 dockerized 开发环境的blog post 中有一个部分给出了以下问题和第一段答案:

您想要什么类型的构建工件?

我在这个例子中想要的构建工件是一个正在运行的容器。 Compose 或 docker 都是合适的工具 结尾。在您的场景中,您可能更喜欢拥有可分发的图像, 或者您可能希望构建在您的主机上生成一个二进制文件 操作系统。

我在another question 中读到,工件 可以是在一个过程中创建的任何东西。通过阅读其他答案,似乎使用该术语的上下文很重要。

在使用Docker创建开发环境的上下文中,build artifact是什么意思?

【问题讨论】:

@allingeek 会喜欢你的想法! 【参考方案1】:

简而言之我会说:Environment + Compiled output = Artifact

完整的环境,包括构建源代码(image)所需的所有工具、依赖项等,+ 实际构建/编译的结果(runnables/libs),后者存储在前者中!

这样,万一发生崩溃/错误,一切都为您准备好了,无论问题发生在什么尘土飞扬的旧版本软件上,都可以进行调试。 *

*:我没有在上面的描述中包含来源,但这也可能更可取。否则,由于我们都使用版本控制,所以如果需要,它可以在以后挂载。

工件与图像:

(来自 cmets 的注释)

“Artifact”只是一个词,表示所生产的东西;在这种情况下,开发软件时的副产品。因此,runnables/libs 是编译源代码时产生的工件,而图像是整个“构建”步骤产生的工件,基本上是包含一个或多个其他工件的工件! em>

当您开始使用自动构建、测试和部署管道 (AKA Continuous Delivery) 时,这更有意义。


注一:

这将是最终结果,因此在此之前如何选择设置任何步骤取决于您(split-image approach 等)。

注2:

我最近才开始将 docker 与持续交付相结合,所以这些只是我最初的两分钱 :)

【讨论】:

谢谢你的两分钱 :) 那么人工制品和图像有什么区别呢?你的定义听起来很像我的形象。 在这种情况下,图像神器! :) “Artifact”只是一个词,表示所生产的东西,在这种情况下是开发软件时的副产品。因此,runnables/libs 是编译源代码时产生的工件,而 image 是整个“构建”步骤产生的工件,基本上是一个包含一个或多个其他工件的工件)!当您开始使用自动化构建、测试和部署管道时,这更有意义。又名Continuous Delivery. @helmesjo 我会在您对答案的评论中添加该示例,这让我更清楚:) @guival 当然!更新了答案。让我知道它是否变得更多(或更少)令人困惑...... :)【参考方案2】:

就一般的构建管道而言,Artifact 是在构建过程中生成、存储在存储库中并最终部署到不同环境中的软件组件。

对于非 dockerized Java 应用程序,这通常是 JAR/WAR。 对于 dockerized 应用程序,这通常是包含 JAR/WAR 的映像。

【讨论】:

以上是关于在 dockerized 开发环境的上下文中,“构建工件”是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

基于Docker的可持续交付

使用gogs,drone搭建自动部署

在windows环境里,用Docker搭建Redis开发环境(新书第一个章节)

在windows环境里,用Docker搭建Redis开发环境(新书第一个章节)

Scala构建元数据

Docker Compose 原理