如何防止TeamCity Build代理删除工作文件夹

时间:2015-01-30 17:33:53

标签: teamcity

我的构建脚本包含一个本地属性文件,用于设置特定于机器的值(例如构建的基本目录)。这些对于下载源的每台计算机都是唯一的。

如果构建代理程序尚未运行一段时间,它将删除项目的工作文件夹并最终删除属性文件。稍后进行更改时(在构建代理清理最近未使用的文件夹的一段时间之后),构建会中断,直到恢复属性文件。

我不确定正确的方法是阻止TeamCity的构建代理删除该文件夹/文件(不确定如何完成此操作,这似乎是最简单的解决方案),或者让构建脚本尝试生成属性文件时运行构建并且属性文件不存在。

热切欢迎任何建议!

3 个答案:

答案 0 :(得分:1)

此属性文件来自哪里?它是由您的脚本生成的吗?

TeamCity从源服务器获取源文件,因此可以清除它,您不能依赖于克隆后放入该源的文件。

您可以做的是将此文件的副本放在安全的地方,并在脚本中将此文件复制到您需要的位置。

答案 1 :(得分:0)

避免特定于机器的行为是构建服务器的目标之一,因此TeamCity的设计并不容易。

关于您提到的特定属性,如果构建的基本目录始终是相对于checkout目录的相同路径,则可以在构建配置中设置环境变量,例如。设置env.BASE_DIRECTORY = %system.teamcity.build.checkoutDir%/build

答案 2 :(得分:0)

你的两个建议都有效。我最终将从(签入)模板文件生成文件并修改机器的属性。

@Mark Raymond:您的评论非常有效。 TeamCity绝对不会让事情变得简单。您的解决方案可行,但我赞成修改构建脚本以生成文件,因为它可以帮助其他开发人员,他们下载新代码,在不构建特定于构建机器的解决方案的情况下启动和运行。

@Gerald:那就是最终,我必须要做的事情。我在下面发布了我的Nant目标供参考:

具体问题是设置一个基本目录,可以相对设置其他路径。以下是我最终采用的解决方案:

<target name="assert.local.properties.exists"> <if test="${not file::exists('local.properties.xml')}"> <copy file="local.properties.xml.template" tofile="local.properties.xml" overwrite="false"/> <xmlpoke file="local.properties.xml" xpath="/properties/property[@name = 'base.dir']/@value" value="${directory::get-current-directory()}" /> <include buildfile="local.properties.xml" /> </if> </target>