【发布时间】:2016-04-12 18:03:34
【问题描述】:
我是 TeamCity 的新手,正在从不同的 CI 产品迁移,并试图弄清楚如何在 TeamCity 9.1.6 版上为 c++ 项目配置工作构建。
我遇到的问题是代理在组件构建之前(或期间)删除了我的依赖目录,而我在构建日志中的任何地方都找不到发生这种情况的记录。
系统中任何组件的构建布局如下所示:
<base-dir>
|
+---<to-be-built>
+---<dependency-1>
+---Include
+---Lib
+---<dependency-2>
+---Include
+---Lib
...所以,无论组件的 checkoutDir 是什么,都假定所有依赖项都将在对等目录中找到,以依赖项命名,文件夹名称中没有版本信息。
例如,如果“MyExe”的 3.0.2 版本依赖于“SomeLibA”的 1.1.0 版本和“SomeLibB”的 2.1.0 版本,则文件系统应如下所示:
MyExe_3.0.2
|
+---MyExe
+---SomeLibA
+---Include
+---Lib
+---SomeLibB
+---Include
+---Lib
因此,要创建此构建布局,“MyExe”版本 3.0.2 的构建配置指定了一个自定义检出目录,如下所示:“MyExe_3.0.2/MyExe”。
到目前为止,一切都很好。依赖项被配置为工件依赖项,并且它们的目标目录被指定为“../”。这似乎也很简单。
但是,当我开始构建时,我看到正在检索要构建的组件,然后我看到依赖项到达,然后我为构建配置的 gradle 任务运行,就在那一刻,或者就在之前,所有的依赖目录(SomeLibA 和 SomeLibB)都被清除了,当然组件找不到它的任何依赖的包含文件并且编译失败。
我已经关闭了组件上的“清理检出目录中的所有文件”和所有依赖项的“下载工件前清理目标路径”,但这没有任何效果。
我只发现了 2 个可能与此行为相关的提示,但我不确定为什么其中任何一个都会导致此问题。
第一个是“MyExe”的“版本控制设置”选项卡上的一个小警告符号,上面写着“TeamCity 在构建之前可能会清理此目录”,指的是自定义目录。但是,在构建运行期间被清除的目录不是 checkout 目录,而是 checkout 目录的父目录。
我能找到的唯一其他可能的候选者是我配置的 gradle 任务不是构建运行时指定的唯一任务。我在构建日志中没有看到“gradlew.bat myGradleTask”,而是看到了“gradlew.bat --init-script C:\TeamCity\BuildAgent\plugins\gradle-runner\scripts\init.gradle myGradleTask”。
但是,我查看了那个初始化脚本,并没有看到任何与目录清理相关的内容。
我被难住了。有谁知道发生了什么,以及如何解决它,以便这个构建可以成功完成?可接受的解决方案必须保留上述构建布局要求。
【问题讨论】:
标签: c++ gradle dependencies teamcity