从.net项目中的svn:external build引用构建工件
这是我之前提出的问题的延续性问题
现在,我的项目树的根目录中有一个/ externals目录。在这个里面,我引用了另一个项目。我可以在主项目NAnt脚本中编写所有外部组件的脚本。这些构建的结果如下:
/ externals / external-project1 / build / buildartifacts / {dlls | html | js}
/ externals / external-project2 / build / buildartifacts / {dlls | html | js}
这一切都很好,但是现在我很好奇我的主项目应该如何引用这些构建工件。例如,假设外部项目构建了我的某些代码库所依赖的DLL。我应该只在构建工件目录中引用DLL还是应该实现另一个将这些对象复制到/ thirdparty / libs /文件夹的NAnt任务?
这意味着我的构建现在依赖于构建此外部项目(可以是内部项目,也可以是第三方)的能力。最好检查一下最新的构建工件集,以确保主构建不会因依赖的构建中断而中断吗?
希望这很清楚。只需写下来,对我来说就至少可以解决这个问题了:-)。
- 编辑 -
谢谢你们。我认为我将实施"检出修订",但是由于构建是如此之快,所以我不会检入任何构建工件。还必须弄清楚如何处理外部项目的依赖关系(例如:原型,swfobject等)。
解决方案
我会说一次构建它们,并检查/ public / ext / some_dependency / ref中的构建工件(显然,该文件夹的名称由我们决定:-)),然后从那里引用它们。
我的主要原因是,每次构建产品时,我们几乎都不需要构建外部依赖项。通常,外部依赖关系应该很少改变。另外,我们希望严格控制何时选择外部依赖项更改,以避免在编码阶段引入不稳定性。
作为对此的扩展,我将添加一个单独的CI任务,该任务将仅构建外部依赖项,并在某些外部条件下,在依赖项源文件夹中进行提交时,在上述文件夹中检查它们。
我所提出的建议之一(我认为来自Mike Mason的《 Pragmatic Version Control》一书)是指我们外部的特定修订版,以便我们始终获得相同版本的外部依赖,直到我们明确选择更改它为止。
在这一点上,我们可能已经交互式地构建了一次它以确保它能正常工作,因此,每次依赖它来构建都不是真正的问题,从而避免了在构建任务中添加一些间接的需要。
如果我们选择使用间接寻址,并且由于某种原因在外部构建确实失败,则可能会错过此内容,因为下一个nant任务将提取前一个二进制文件。