2013-08-26 117 views
1

有没有办法让TeamCity build 的工件被引用为(但未复制)作为另一个TeamCity构建的依赖关系?TeamCity依赖没有复制文件?

一些背景:我一直在努力减少一些TeamCity配置中的构建时间。这是一个依赖于多个第三方库的C++程序,我们的系统管理员一直不愿意在构建机器上安装它。

我们的第一次运行将库压缩并解压缩/编译为配置中的构建步骤。这需要一段时间,所以Sys Admin将第三方lib解压缩/编译移植到单独的配置中,并将该构建的构件设置为构建的依赖关系,我试图加快构建速度。

但是,在这种构建配置下情况更糟糕。展开/编译的第三方库大小(超过1GB)实际上使原始配置速度提高了10分钟以上。如果有一种方法可以在不复制东西的情况下引用工件目录,那就太棒了。

回答

1

据我知道有没有办法阻止服务器的神器副本剂:这将是不可能的编译器/链接找到的依赖......

在我看来,你可以采取的最好的这两种配置都是通过发布压缩文件(只需将“.zip”推迟到目标路径)并从“上次成功构建”中获取它们。

这样你将只触发相应的源代码更改(减少总体构建时间)的lib重新编译,并且工件将作为压缩存档传输(减少传输时间)。

也许你可以通过与其他人分开构建每个库来进一步优化:只有具有挂起更改的库才会被重新编译。

+0

嗯...压缩的神器路线听起来很有趣。我会捅一下,看看它是否比第一个解决方案更快。如果是这样,我会将其标记为答案(除非有人设置参考)。谢谢! – eb1

2

不要使用artefact的依赖关系。

而是建立两个以上的生成配置(一个主要应用程序,一个或更多的第三方库),然后在它们之间建立snapshot dependencies,它配置到运行建立在同一代理

这样做可以确保第三方库中的二进制文件始终在本地文件系统上可用,并始终保持最新状态(但不经常重建 - 假设没有源更改)。

您应该能够在checkout directory中找到足够容易的第三方二进制文件。

人为因素缓慢的原因是他们上传到中央中央服务器,然后由代理下载。显然不适合1GB的第三方库。