2

这是我之前问过的问题的延续问题

我现在在项目树的根目录中有一个 /externals 目录。在这里面,我引用了另一个项目。我可以在主项目 NAnt 脚本中编写所有外部组件的构建脚本。这些构建的结果如下:

/externals/external-project1/build/buildartifacts/{dlls|html|js}

/externals/external-project2/build/buildartifacts/{dlls|html|js}

这一切都很好,但现在我很好奇我的主要项目应该如何引用这些构建工件。例如,假设外部项目构建了我的一些代码库所依赖的 DLL。我应该简单地引用构建工件目录中的 DLL,还是应该实现另一个将这些复制到 /thirdparty/libs/ 文件夹的 NAnt 任务?

这意味着我的构建现在依赖于构建这个外部项目(可以是内部项目,也可以是第三方项目)的能力。签入最新的构建工件集以确保主构建不会因为依赖构建中断而中断是个好主意吗?

希望这足够清楚。只是把这个写下来对我来说至少澄清了这个问题:-)。

- 编辑 -

多谢你们。我想我将实施“签出修订版”,但由于构建速度如此之快,我不会签入任何构建工件。还必须弄清楚如何处理外部项目的依赖关系(例如:原型、swfobject 等)。

4

2 回答 2

1

我会说构建它们一次并检查 /public/ext/some_dependency/ref 中的构建工件(显然,该文件夹的命名取决于您:-))并从那里引用它们。

我的主要原因是每次构建产品时都很少需要构建外部依赖项。一般来说,外部依赖关系应该很少改变。另外,您希望严格控制何时选择外部依赖项更改,以避免在编码阶段引入不稳定。

作为对此的扩展,我将添加一个单独的 CI 任务,该任务将仅构建外部依赖项,并在某些外部条件下在上述文件夹中检查它们 - 依赖源文件夹中的提交或其他内容。

于 2008-10-02T23:25:48.617 回答
1

我的建议之一(我认为来自 Mike Mason 的 Pragmatic Version Control 一书)在您的外部引用特定修订,以便您始终获得相同版本的外部依赖项,直到您明确选择更改它。

此时,您可能已经交互式地构建了一次以确保其正常工作,因此每次都依赖它来构建并不是真正的问题,这避免了在构建任务中添加一些间接性的需要。

如果您选择使用间接,并且由于某种原因构建确实在外部失败,则可能会错过此操作,因为下一个 nant 任务将拾取前一个二进制文件。

于 2008-10-02T23:35:20.323 回答