2011-12-19 109 views
2

我们有几个项目,并且彼此之间有依赖关系。例如,我们有一个依赖于项目foo的项目栏。 foo项目是我们希望包含在所有其他项目中的SDK(基础库),因为我们发现我们一次又一次地解决了同样的问题。如何使用TeamCity包含另一个项目中的另一个项目的DLL

目前项目foo和bar是独立构建的,bar项目有对foo.dll的引用,它存储在SVN的bar \ lib文件夹中。因此,如果我们对foo项目进行任何更改,那么我们必须采取最新的构建,检查栏项目并复制新的DLL并再次提交。这是一个小手册,烦人。特别是因为我们现在有大约3或4个依靠foo图书馆的项目。

我不想把所有东西都放在一个解决方案中,因为这看起来有点愚蠢。 foo项目不应该经常更改并提供SDK。他们不相互关联。我们已经将相关项目集中在解决方案中。我们有一些解决方案,已经有4-5个项目与他们的测试项目。把所有东西放在一起会产生一个40-50个项目的解决方案,这看起来像一场噩梦。

我想用TeamCity实现的是,如果对Foo进行了任何更改,它会使用更新后的Foo DLL自动触发一个新的栏版本。这样,如果有人做出突变,我们立即找到。然后,罪魁祸首必须解决他的错误提交或在所有依赖项目中进行必要的更改。

到目前为止,我们已经完成了大部分解决方案构建在TeamCity中,运行单元测试和创建工件。我试图在foo构建的bar构建配置中设置工件依赖项。这应该将foo \ build \ release \ foo.dll复制到bar \ lib \ foo.dll中。我们现在得到错误,说明

Failed to resolve artifact dependency xxx ... java.io.FileNotFoundException ... Access Denied 

什么是做我们正在尝试的最佳做法?我们正在走正确的道路吗?如果我们正在以正确的方式来解决这个错误?

回答

3

您可以使用SVN外部在中心位置的项目之间共享程序集。

在构建结束时,我们总是在SVN中标记输出,并用最新的构建输出替换最新文件夹的内容。

_output\v1.2.3\ 

_output\v1.2.4\ 

_output\latest\ 

所以latest将包含相同v1.2.4文件夹。所以在开发中,我们始终将我们的项目依赖项定位到最新的文件夹,因此无论何时检出项目,它总是会加载最新的成功构建程序集。

通过这种方式,我们可以在TeamCity中链接构建配置,以便使用您的示例在FOO成功构建时立即构建BAR;并且因为它从最新的文件夹检出FOO程序集,所以BAR项目是使用最新更改构建的。

这是什么让它持续集成,而不仅仅是一个构建过程。

任何错别字的道歉。我在我的笔记本电脑上使用微型camperv;钥匙很小,没有太多的肘部空间!

+0

+1。谢谢 – uriDium 2011-12-20 08:38:33

相关问题