有没有办法让TeamCity的工件构建引用(但不能复制)作为另一个TeamCity构建的依赖项?
一些背景知识:我一直在尝试减少几个TeamCity配置中的构建时间。这是一个c ++程序,依赖于几个第三方库,我们的Sys Admin一直不愿意在构建机器上安装。
我们的第一次运行将库压缩并解压缩/编译为配置中的构建步骤。这需要一段时间,因此Sys Admin将第三方lib解压缩/编译移动到一个单独的配置中,并将该构建的工件设置为我正在尝试加速的构建的依赖项。
但是,在这种构建配置下情况更糟。扩展/编译的第三方库(超过1GB)的大小实际上使原始配置更快速超过10分钟。如果有一种方法可以在不复制内容的情况下引用工件目录,那就太棒了。答案 0 :(得分:2)
不要使用artefact依赖。
而是创建两个或更多构建配置(一个用于主应用程序,一个或多个用于第三方库),然后在它们之间创建snapshot dependencies,将其配置为 在其上运行构建剂 强>
这样做可以确保第三方库中的二进制文件始终在本地文件系统上可用并始终保持最新(但不会经常重建 - 假设没有源更改)。
您应该能够在checkout directory中轻松找到第三方二进制文件。
人工制品很慢的原因是他们上传到中央中央服务器,然后由代理商下载。显然不适合1GB的第三方库。
答案 1 :(得分:1)
据我所知,没有办法阻止从服务器到代理的工件复制:编译器/链接器不可能找到依赖项...
在我看来,您可以通过发布压缩工件(只需将“.zip”推迟到目标路径)并从“上次成功构建”中获取它们来充分利用这两种配置。
这样,您将仅在相应的源代码更改时触发lib重新编译(减少总体构建时间),并且工件将作为压缩存档传输(减少传输时间)。
也许您可以通过将每个lib与其他lib分开构建来进一步优化:只会重新编译具有挂起更改的库。