问题描述
在最近的大学讲座中,我学习了关于高级测试和持续集成的内容。为了理解所有的概念,我在DevOps领域中搜索了关于”工件”(artifact)的含义。然而,我发现了许多矛盾的说法、定义和文章。
因此,我想请教,是否有一个标准(或至少一些不成文的规则),能够明确地说明什么可以被视为工件。工件中应该始终包含哪些最重要的部分?
许多来源称工件不应该是源代码,而是交付物,通常以JDK作为示例。在这种情况下,我想知道在使用JavaScript或Python等脚本语言时的等效物是什么。
感谢你对所有解释的贡献!
解决方案
以下是关于工件的一些解释,可能因为不同情况会有所不同。请参考这些建议,但根据实际情况做出适当的调整。
工件是一个抽象的概念,可以是任何由他人创建的东西。就像在保加利亚我们为冬天制作”果酱”一样(这被称为“compot”)。基本上,它是一种工件,是由我的祖母制作的,我可以使用它。
在IT世界中也是如此,但有一个小小的不同之处。Java的工件稍微特殊一些,因为Java是一种静态语言,在运行阶段之前,你会有这些已编译的工件 – *.jar 文件。之后你可以在”运行”阶段引用它们。这就是为什么它们经常被称为最直观的工件示例,因为Java编译器会生成这些文件。
但是,Java的工件与我祖母的工件之间的一个主要区别是,每个工件最好都有一个版本,这样你可以轻松地切换它们,看看哪个有效,哪个无效。
对于动态语言(如JavaScript和Python),它们没有像Java那样的编译工件,你只需要引用相应的 ‘.py’ 文件。
作为一个总结,工件可以是任何东西:从 tar.gz 到 jar 文件,但它们必须始终具有版本号。当然,版本控制可能在稍后的阶段(如Docker镜像标签)引入,但原则仍然保持不变。
在真实项目中,工件可以是各种不同的东西,以下是我参与的一些项目中被视为工件的示例:
– 包含Java类的普通 jar 文件。
– 包含源代码的 jar 文件。
– Eclipse插件。
– Eclipse产品。
– 包含产品/插件更新站点的 zip 文件。
– 包含机器学习模型的 zip 文件。
– Dockerfile(可能是生成的)。
– Docker 镜像。
– 用于构建某个包的 Conan 配方。
– 该包的二进制构建。
是的,工件也可以被称为交付物,但不要忘记有时源代码本身就是交付物!
请根据实际情况判断工件的具体内容和形式,以及是否需要进行版本控制。不同项目和情况可能会有不同的要求。
希望这些解释对你有所帮助,如果你还有更多问题,欢迎继续提问!