TeamCity c ++ gradle build删除工件依赖项

时间:2016-04-12 18:03:35

标签: c++ gradle dependencies teamcity

我是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)都被清除了,当然组件找不到任何依赖项的包含文件和编译失败。

我已经关闭了组件上的“清理checkout目录中的所有文件”和“在下载工件之前清理目标路径”所有依赖项,但这没有任何效果。

我只发现了可能与此行为相关的2个提示,但我不确定为什么它们中的任何一个都会导致此问题。

第一个是“MyExe”的“版本控制设置”选项卡上的一个小警告符号,其中显示“此目录可能在构建之前由TeamCity清除”,指的是自定义目录。但是,在构建运行期间清理的目录不是checkout目录,它是checkout目录的父目录。

我能找到的唯一其他可能的候选者是我配置的gradle任务不是构建运行时指定的唯一任务。我没有在构建日志中看到“gradlew.bat myGradleTask”,而是看到“gradlew.bat --init-script C:\ TeamCity \ BuildAgent \ plugins \ gradle-runner \ scripts \ init.gradle myGradleTask”。

但是,我查看了那个init脚本,并没有看到任何与目录清理相关的内容。

我很难过。有没有人知道发生了什么,以及如何解决它,以便这个构建可以成功完成?可接受的解决方案必须保留上面的构建布局要求。

1 个答案:

答案 0 :(得分:0)

此处的问题是禁用“在构建之前清除结帐目录中的所有文件”。

禁用此复选框可以消除结帐目录的整个路径的内容。

供参考,请参阅此处的文档: https://confluence.jetbrains.com/display/TCD9/Clean+Checkout

......相关的摘录是:

  

自动清洁结帐

     

如果未启用清除结帐,则TeamCity会更新中的源   checkout目录递增到所需的状态。 TeamCity尝试   检测结帐目录中的源是否不是   对应于预期状态并触发清理结账   这种情况确保来源是合适的。

     

这意味着在某些情况下TeamCity可以检测到干净   即使未在VCS设置中启用,也必须结帐   而不是用户从Web UI请求的。在这种情况下所有的   结帐目录的内容将被删除,并重新填充   从头开始的消息来源。如果有任何详细信息   决定,它们会在结帐相关之前添加到构建日志中   日志记录。

启用此复选框会使依赖目录保持不变。