我运行一个包含多个独立应用程序的相当复杂的项目。然而,这些使用了几个共享组件。所以我有一个类似于下面的源代码树。
- 我的项目
- 应用 A
- 共享1
- 共享2
- 应用 B
- 应用 C
所有应用程序都有自己的 MSBuild 脚本,用于构建项目及其所需的所有共享资源。我还在 CruiseControl 控制的持续集成构建服务器上运行这些构建。
部署应用程序时,它们会部署在多台服务器上以分配负载。这意味着跟踪每个不同服务器上部署的构建/修订版本非常重要(我们需要在 DLL 版本中包含当前版本,例如“1.0.0.68”)。
同样重要的是能够重新创建一个已构建的修订/构建,以便在某些事情没有按预期工作时能够回滚(哦,是的,那发生了......)。今天我们使用 SourceSafe 进行源代码控制,但如果我们能提出充分的理由,这可能会改变(SS,到目前为止它实际上对我们来说工作正常)。
我们尝试遵循的另一个原则是,只有由我们进一步部署的集成服务器构建和测试的代码。
“CrusieControl 构建标签”解决方案
我们对解决上述问题有几个想法。第一个是让持续集成服务器构建并在本地部署项目并对其进行测试(现在可以这样做)。您可能知道 CruiseControl 中的成功构建会生成一个构建标签,我想我们可以用它来设置可执行文件的 DLL 版本(所以构建标签 35 会创建一个类似“1.0.0.35”的 DLL)?这个想法也是使用这个构建标签来标记完整的源代码树。然后我们可能可以通过该标签检查并稍后重新创建构建。
标记完整树的原因是不仅包括实际的应用程序代码(位于源代码树中的一个位置),还包括所有共享项(位于树中的不同位置)。因此,“Application A”的成功构建将使用标签“ApplicationA35”标记整个树。
但是,在部署之前尝试重新创建此构建并设置 DLL 版本时可能会出现问题,因为我们将无法再访问 CruiseControl 生成的构建标签。如果所有项目的所有 CrusieControl 构建标签都是唯一的,我们可以只使用编号进行标签,但情况并非如此(应用程序 A 和 B 可以同时在构建 35 上)所以我们必须在标签。因此 SourceSafe 标签为“Application35”。一旦我们构建了构建 35,我如何重新创建构建 34 并将 1.0.0.34 设置为 DLL 版本号?
“修订号”解决方案
有人告诉我,例如 Subversion 会在每次签入时为整个源代码树创建一个修订号——是这样吗?SourceSafe 有类似的东西吗?如果这是正确的,那么想法是在获取最新版本时获取该修订号并在 CruiseControl 服务器上构建。然后可以使用修订号来设置 DLL 版本号(例如“1.0.0.5678”)。我想如果需要,我们可以为 Subversion 获得这个特定的修订,然后将包括该应用程序和所有共享项目,以便能够从过去重新创建特定版本。这会起作用吗?这是否也可以使用 SourceSafe 来实现?
总结
所以两个主要要求是:
- 能够跟踪构建和部署的 DLL 的构建/修订号。
- 能够重建过去的修订/构建,在该构建的可执行文件上设置旧的构建/修订号(以符合要求 1)。
那么你将如何解决这个问题?您首选的方法是什么,您将如何解决它(或者您有完全不同的想法?)?**请给出详细答案。**
奖励问题修订号和内部版本号之间有什么区别,什么时候真正需要两者?