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

How to prevent TeamCity Build agent from removing work folders

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

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

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

热切欢迎任何建议!

这个属性文件是从哪里来的?它是由您的脚本生成的吗?

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

您可以将此文件的副本保存在安全的地方,然后在您的脚本中将此文件复制到您需要的位置。

避免特定于机器的行为是构建服务器的目标之一,因此 TeamCity 的设计并不是为了让它变得简单。

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

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

@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>