Continuous integration 内部代码的工件存储库点

Continuous integration 内部代码的工件存储库点,continuous-integration,nexus,artifactory,continuous-deployment,continuous-delivery,Continuous Integration,Nexus,Artifactory,Continuous Deployment,Continuous Delivery,想象一下,对于一个基于云的解决方案,部署的代码中有很大一部分是在内部开发的。我的问题是,在内部代码中使用工件库有什么意义,在这里您可以直接从源代码构建任何版本 换句话说,花时间在构建服务器上以方便从代码构建所需的工件版本,与添加工件库(如Nexus)以向部署提供构建工件相比,这难道不是更有意义吗 理论上是的,如果你能确定的话 进入工件的所有内容都被检入,比如源、数据文件 用于构建工件的确切环境(操作系统、编译器、链接器、工具)可以完美地恢复(虚拟机快照) 什么都没有忘记 编辑 实际上,正如马

想象一下,对于一个基于云的解决方案,部署的代码中有很大一部分是在内部开发的。我的问题是,在内部代码中使用工件库有什么意义,在这里您可以直接从源代码构建任何版本


换句话说,花时间在构建服务器上以方便从代码构建所需的工件版本,与添加工件库(如Nexus)以向部署提供构建工件相比,这难道不是更有意义吗

理论上是的,如果你能确定的话

  • 进入工件的所有内容都被检入,比如源、数据文件
  • 用于构建工件的确切环境(操作系统、编译器、链接器、工具)可以完美地恢复(虚拟机快照)
  • 什么都没有忘记
编辑 实际上,正如马克·奥康纳(MarkO'Conner)所指出的,即使是这样,两个构建通常也不完全相同,因为它们通常包括时间戳和校验和,这取决于前者。您必须在构建过程中手动修复这些问题,或者在构建计算机上准确地再现时间和计时

否则,您可能会面临无法(准确地)重建某个工件的情况。我更喜欢将所有内容发布到安全的地方。

这本书将多次构建二进制文件的做法称为反模式:

此反模式违反了两个重要原则。首先是 保持招聘渠道的有效性,以便团队能够及时获得反馈 尽快。重新编译违反了这一原则,因为它 需要时间,尤其是在大型系统中。第二个原则是 始终建立在已知良好的基础上。获取的二进制文件 部署到生产中的应与部署到生产中的完全相同 通过验收测试过程,确实在许多管道中 在实现中,通过将二进制文件的哈希存储在 创建它们并验证二进制文件是否相同的时间 在过程的每个后续阶段


在高度规范的域中,通过哈希进行二进制相等性检查对于审计目的也很重要。

每次重建同一版本时,生成的文件都有不同的文件校验和。这使得不可能绝对确定同一版本已部署到两台不同的机器上。从工件存储库重用相同的二进制文件可以解决这个问题。其次,对于开源项目来说,在发布工件的同时发布包含源代码的jar是很常见的。这使第三方能够验证原始开发人员发布(并签名)的源代码和二进制代码。