我们有一个庞大的存储库,可以构建一个非常大的应用程序并生成数十亿字节的文件。我们的建造时间在1-2小时之间,具体取决于“年龄”和“年龄”。 :)构建代理。
大多数时候我们需要持续集成构建,例如检查它是否编译等等。
然后有时候我们想要从这个大型仓库中创建一个安装程序,其中包含来自工作目录各个位置的数据(它不仅仅是Bin / Release目录)
在Jenkins中,我们通过两个构建作业来实现这一点,一个在他的目录A中构建代码,另一个构建创建安装程序的作业,但我们也强制将其工作目录设置为A.
现在我们正在测试TeamCity,我知道这里的情况有所不同。
我一直在阅读有关快照和工件依赖性的内容,但我不确定我是否做到了这一点。
让我们说在构建之后检出和构建工作区实际上是整个人工制品池,因为我们需要来自此工作空间中许多位置的许多东西,例如二进制文件,资产,包括标题,配置文件,文档等。
由于构建和obj文件需要大量外部框架,因此一个带有签出源和中间文件的构建大约为30 Gb。没有它们,打包的东西仍然是大约10 Gb和数千个文件。
如果我将依赖版本设置为在具有相同版本的同一台机器上运行,它仍然必须在服务器上有效存储10 Gb的人工制品,并在代理上使用缓存,对吧?即使进行清理,依赖构建也需要通过复制它们来接收文物?
我环顾四周,没有发现TeamCity将同一代理上的数据的智能联结或软拷贝放到另一个目录中。其中一些资产很小很多,这意味着复制10演出也很慢。
我错过了一些关于这个概念的东西吗?我知道我也可以更改安装程序配置的工作目录,但由于这些是由项目设置的一些哈希校验和创建的,我倾向于搞乱它们。
为了清楚起见:这是c ++,对于这个规模的代码库,完全重建和持续时间是可以接受的(尽管不是很有趣)。
答案 0 :(得分:1)
当前代理程序将工件发送到服务器,并且在依赖于工件的构建开始时从服务器上载工件。有相关请求:https://youtrack.jetbrains.com/issue/TW-4339,请投票赞成。 目前的解决方法是(每个都有自己的优点和缺点):