我正在寻找一种工具来管理构成软件版本的二进制文件(输入组件)的集合。这是一个软件产品,在过去的 20 年里,我们每年都会发布多个版本。文件的详细信息和类型可能会有所不同,但这是许多软件团队需要管理的内容。
软件版本由什么组成?
我们的软件版本包含多种文件,包括:
- Windows 可执行文件/二进制文件(40 个 DLL 和 30 多个 EXE 文件)。
- 安装程序用于创建数据库的脚本
- 适用于各种平台(.NET、ActiveX 和 Java)的 API 程序集
- 文档文件(HTML、PDF、CHM)
- 示例应用程序的源代码
单个版本的完整收集文件约为 90MB。大多数是从源代码构建的,但有些是第 3 方。
手动流程
很久以前,我们手动管理这个。
- 启动每个新版本时,用于构建最后一个版本的文件将被复制到共享驱动器上的新文件夹中。
- 开发人员将手动添加或更新此文件夹中的文件(希望不会意外丢失或删除任何内容)。
- 将使用此文件夹中的文件编译软件安装程序脚本以生成 SETUP.EXE(输出)。
- 在验证和测试期间迭代步骤 2 和 3,直到发布。
自动化流程
几年前,我们采用了 CI(每晚或按需构建我们的二进制文件)。
我们求助于将第 3 方二进制文件置于版本控制之下,因为它们通常不会经常更改。
然后,我们根据 CI 构建输出自动化了为发布收集和更新文件的过程。最后,我们能够自动构建我们的 SETUP.EXE。
剩余差距
到目前为止很好,但这给我们留下了两个问题:
- 重新构建程序集 CI 主要是在某些事情发生变化时构建项目,但当强制执行时,它会重新编译没有任何代码更改的二进制文件。输出是我们之前测试过的二进制文件的全新构建(提示:我们应该始终相信它们是等价的吗?)。
- 最新与稳定我们的 CI 机器主要构建每个项目的最新版本。在某些情况下这是可以的,但我们通常希望发布一个较旧的测试或稳定版本。为此,我们为最新和稳定的构建提供了单独的 CI 项目——这可行但很笨拙。
感谢您的耐心等待,如果您已经走到这一步了:-)
我还没有找到我要找的东西
在寻找解决方案一段时间后,似乎构建我们自己的解决方案可能更容易,但肯定有人以前解决过这些问题!?
我们想要的是一种存储和管理二进制文件(来自 CI 的输出,或第 3 方文件)的方法,这样每个文件都带有一个版本(v1.2.3.4)标签,允许:
- CI 发布每个二进制文件的新版本(但拒绝已经存在的重建版本)。
- 开发团队为软件版本(有点像 NuGet packages.config)制定配方,指定要包括的组件:
- 包裹名字
- 版本
- 发布文件夹中的路径/目标
- 使用配方的自动包脚本收集所需的文件,并编译安装包(例如 SETUP.EXE)。
我知道过去关于在 VCS 中存储二进制文件的争论。现在我正在寻找更好的解决方案。这种方法对于长期持续使用(例如如何修剪旧的二进制文件)似乎并不理想......以及其他问题。
我已经尝试了一些当前可用的工件存储库。根据我的调查,这些为组件/工件存储和版本控制提供了解决方案。但是,它们不提供用于管理要包含在软件版本中的组件/工件列表的工具。
有没有人知道这方面的工具?
您是否找到了让 CI 基础架构解决这些遗留问题的方法?
如果您使用工件存储库来解决此问题,您如何管理和自动化该过程?