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

3
我的构建脚本包含一个本地属性文件,用于设置特定机器的值(例如构建的基础目录)。这些值对于每个下载源代码的机器都是唯一的。
当构建代理长时间未运行时,它会删除项目的工作文件夹,并最终删除属性文件。当稍后进行更改时(在构建代理清理了最近未使用的文件夹的一段时间之后),构建会中断,直到属性文件被恢复为止。
我不确定正确的方法是防止TeamCity的构建代理删除该文件夹/文件(不确定如何完成这项任务,似乎这是最简单的解决方案),还是在运行构建并且属性文件不存在时尝试生成属性文件。
欢迎任何建议!

1
出于性能方面的好奇,我想知道是否有不删除文件夹的设置? - dmarlow
我从未找到一个设置让TeamCity保留文件夹,这就是为什么我选择了下面提到的解决方案。 - Flea
3个回答

1
这个属性文件是从哪里来的?是你的脚本生成的吗?
TeamCity从源服务器获取源文件,因此可能会被清理,您不能依赖在克隆后放入源中的文件。
您可以将此文件的副本存放在安全的地方,并在脚本中将此文件复制到需要的位置。

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>


0
避免机器特定的行为是构建服务器的目标之一,因此TeamCity不是设计成易于实现这一点。
关于您提到的具体属性,如果构建的基本目录相对于检出目录始终是相同的路径,则可以在构建配置中设置环境变量,例如设置env.BASE_DIRECTORY = %system.teamcity.build.checkoutDir%/build

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接