TeamCity On-Premises 2024.03 Help

Build Checkout Directory(构建检出目录)

构建签出目录是TeamCity代理机器上的一个目录,特定的VCS根目录的构建源代码会在此目录中被签出。 如果构建配置具有相同的 VCS 根,则此目录可以在多个构建配置之间共享。 要了解更多详情,请参阅 默认签出目录自定义签出目录

签出流程

签出过程会受到 VCS Checkout Mode 的影响,具体如下:

  • 如果您使用 agent-side checkout mode,构建代理将在构建之前将源代码签出到构建签出目录。

  • 如果您使用了 server-side checkout mode,那么TeamCity服务器将会向代理发送增量补丁,只更新给定签出目录中自上次构建以来发生变化的文件。

  • 如果您使用 manual checkout 模式,将不会签出任何源文件,但仍将创建默认的构建签出目录,以使用构建脚本签出源文件。 除非配置其过期期限,否则目录将不会自动清理,如 下文所述

对于由 TeamCity 处理的签出(服务器端代理端签出模式),TeamCity 跟踪代理上每个签出目录中最后签出的审查,并对新构建应用从上一次使用的审查到当前构建的审查的增量补丁。 所使用的修订版本可以在构建结果页的 Changes 标签页中查找。

增量签出意味着任何未由 TeamCity 创建或修改的文件(例如,由先前的构建脚本创建)都将以它们修改过的状态保留(除非使用了专门的 VCS 根特定重置选项)。 这就是为什么我们建议:

  • 确保构建作为构建的第一步执行清理过程,这会影响到构建并可能由之前的构建产出的所有文件。 典型的文件包括编译输出、测试报告、构建产生的工件。

  • 确保构建过程永不修改或删除版本控制下的文件。

如果 TeamCity 检测到无法构建增量补丁,将强制执行干净签出。 它也可以手动执行,或配置为在每次构建时执行。

签出目录位置

默认签出目录

默认的签出目录位置(当在构建设置中的 签出目录 字段设定为 自动,在 版本控制设置 页面上)由以下因素决定:

<Build_Agent_Home>/work/<VCS_Settings_Hash_Code>

如果代理工作目录的位置经过自定义,则会发生以下变化:

<Agent_Work_Dir>/<VCS_Settings_Hash_Code>

VCS 设置的哈希代码, <VCS_Settings_Hash_Code> ,是基于一组VCS根、它们的签出规则以及构建配置(签出模式)使用的VCS设置来计算的。 实际上,这意味着所有具有相同 VCS 设置的构建配置之间共享该目录。

源文件根据在 VCS 检出规则 中定义的映射放置在签出目录中。

自定义签出目录

要配置自定义签出目录,请在构建设置 版本控制设置 页面中将 签出目录 字段设置为 自定义路径,并在提供的字段中输入自定义路径。

确保满足以下条件:

  • 不同 VCS 设置的构建配置之间不共享签出目录(否则,每次在目录中构建其他构建配置时,TeamCity 将执行 干净签出);

  • 目录的内容不会被单个 TeamCity 代理以外的其他进程修改(否则,TeamCity 可能无法确保一致的增量源更新)。 如果无法消除此问题,请确保为所有参与的构建配置开启清理构建签出选项。 这条规则也适用于共享相同工作目录的两个 TeamCity 代理。 由于一个 TeamCity 代理对其他代理一无所知,因此其他代理在它看来就像一个外部进程。

请注意,在 某些情况 下,TeamCity 可以删除 checkout 目录的内容。

查找签出目录

如果您正在调查一个问题并需要知道构建配置使用的目录,您可以从构建日志中获取该目录,或者您可以查阅生成的文件, <Agent_Work_Dir> /directory.map ,该文件列出了与上次使用的目录一起的构建配置。

在您的 构建脚本中,您可以使用 TeamCity 提供的 teamcity.build.checkoutDir 属性来引用构建签出目录的有效值。 默认情况下,这也是构建运行的目录。

签出目录过期

服务器端代理端签出 模式下,如果检出目录未被使用(代理未使用该目录作为检出目录运行构建)则会在指定的时间(默认为 8 天)内或当另一次构建所需的空闲磁盘空间超过可用空间时,自动从磁盘中删除这些目录。 在 手动签出 模式下,除非配置了目录的过期期限,否则不会执行自动目录清理。

建议使用 Free disk space 构建功能,以确保构建代理上有足够的磁盘空闲空间。

可以通过以下任一方式指定新的值(以小时为单位)来更改自动目录过期的时间框架:

  • buildAgent.properties 文件中的 teamcity.agent.build.checkoutDir.expireHours 代理属性

  • system.teamcity.build.checkoutDir.expireHours 构建配置属性

    • 0 会在构建完成后立即删除签出目录

    • 从未 将让 TeamCity 知道该目录永远不应该被 TeamCity 删除

    • 默认 将强制使用默认值

在构建代理处于空闲状态(没有正在运行的构建)时,会在后台执行基于过期的目录清理。

最后修改日期: 16日 7月 2024年