DevOps 系列之从前线到后勤:制品管理的演变历史
在软件开发中,“制品”指的是软件开发过程中产生的所有文件和信息,包括源代码、配置文件、编译后的二进制文件、库文件、文档、测试脚本、设计文档等等。
在传统的软件开发模式中,开发和运维是两个相对独立的团队,彼此之间的协作和沟通相对较少。开发团队将代码交给运维团队,然后运维团队负责将代码部署到生产环境中。这种传统的开发和运维分离模式导致了许多问题,例如延迟的交付、手动的部署过程、高错误率和缺乏可靠性等。
1
原始阶段
制品的概念并不是天生就存在于软件开发当中。最早可以追溯到早期的 80 年代,即原始阶段,软件开发尚处于“瀑布式”的前线模式。在这个阶段,软件开发主要关注的是源代码,而其它的如编译后的二进制文件、配置文件等被视为次要的或者是暂时的,没有列入系统的管理。
制品通常被保存在开发者自己的开发环境中,或者通过比如 FTP 这样的简单方法共享给其它的开发者。这些制品的版本追踪和管理主要依赖于开发者自身的记忆或者一些简单的文本文件记录。对于制品的使用和依赖关系,也大多是手动管理。
在这种情况下,制品管理会面临很多问题。
1
制品的存储和共享方式:
在制品的一致性和唯一性上面会有很大的风险。同一份制品可能会存在多个不一致的拷贝,或者被误操作覆盖或者删除。
2
制品的版本管理:
在没有专门工具辅助的情况下,制品的版本很难做到准确追踪和控制。更糟糕的是,这种方式完全无法管理制品之间的依赖关系。
3
制品的协同方式:
开发者很难找到需要的制品,更没有一个统一的平台来支持制品的协同修改和更新。
在这个阶段,我们看到了最原始制品管理的形态。
2
工业阶段
2001 年,Apache Ant 发布,这是一个用于自动化构建 Java 应用的工具,首次在项目中引入了类似制品库的“lib”目录来存放所有的依赖库。这是首次原始概念的提出,同一年,十七位软件开发领域重量级人物发布了“敏捷软件开发宣言”,包括 Extreme Programming(XP) 的创建人 Kent Beck,Scrum 方法的创始人 Jeff Sutherland 和 Ken Schwaber,以及许多其他知名的编程方法和工具的创造者。这次会议也带动了很多的软件开发方法和流程开始向敏捷方式转变,同时也标志着制品管理逐渐向标准化,规范化演变。
2006 年,JFrog 公司发布了 Artifactory,这是业界首个提供完全的制品生命周期管理的商业制品库。Artifactory 对接了 Maven 的中央仓库,并提供了诸如访问控制、复制、存档、元数据、搜索等高级特性。从这一年开始,制品库成为 DevOps 工具链中一项重要的能力,并且也为 DevOps 理念的诞生以及广泛传播,筑造了坚实的基础。
同时 DevOps 理念的提出,将开发和运维的关系推向了一个新的阶段,这个阶段要求开发和运维不再分隔,而是要求他们紧密的协作,研发与运维团队也迫切地需要一种能够支持高效部署和管理的方式。这无疑给制品管理带来了巨大的压力,但也带来了前所未有的机遇。
在这个背景下,制品管理的标准概念应运而生。即制品管理的基本思想是将软件交付过程中的构建产物、依赖和配置等全部统一管理起来。它提供了一个集中的库或存储空间,使得开发人员和运维人员可以方便地访问和共享这些制品。通过制品管理,团队可以更好地控制和管理软件制品的版本、变更和发布,实现持续集成和持续交付的目标。
3
信息化阶段
随着 CI/CD 等 DevOps 实践的普及,越来越多的组织开始认识到制品管理的重要性,即制品管理的信息化阶段。在 2014 年,Nexus Repository Manager 首次发布。这是一个开源的制品管理工具,主要用于管理软件的依赖和构建制品。Nexus 的出现标志着制品管理工具开始得到更多关注和应用。各种制品管理工具和平台也纷纷涌现,例如最早的 Jfrog,国内的嘉为蓝鲸 CPack、Coding 制品库等。这些工具提供了丰富的功能,如版本控制、依赖管理、构建流水线等,同时也有丰富的部署实施方案,如企业私服、唯一可信源等等,帮助团队实现高效的制品管理。
制品管理作为软件开发一种重要的方法论,正从前线作战逐渐转变为后勤支持,最终会实现从开发到运维的全生命周期管理。透过对制品管理发展历程的审视,我们可以明显地看到制品管理越来越重要,而这只是一个开始,未来制品管理还将有更广阔的应用前景,智能化、自动化、跨平台与云原生等新概念、新能力、也在融进现在的制品管理。
评论