依赖缓存
Maven 缓存、 Gradle 缓存 和 NuGet 缓存 是无需配置的构建功能,通过允许相关步骤重用在相同构建配置的先前构建期间下载的依赖项来加速构建。 此外,缓存在相同构建的步骤之间共享,前提是这些步骤使用相同的依赖目录。
所有“... 缓存”构建功能的操作方式相似。 无论构建功能类型如何,缓存都会经历相同的创建、发布、验证和重用阶段。
- 缓存
初始缓存是在第一次构建运行期间形成的。 为此,构建功能会缓存以下受跟踪目录的内容:
Maven: 本地 Maven 仓库。 默认路径取决于步骤 本地制品库设置。
NuGet: 全局包文件夹。 默认路径是
${user.home}/.nuget/packages
。Gradle: Gradle 缓存目录。 默认路径是
${user.home}/.gradle/caches/modules-<version>
。
- 出版
创建缓存后,构建功能会将其发布到 制品存储 ,使处理后续构建的代理可以轻松访问。
- 验证
缓存会定期检查以确定其是否仍然有效或需要替换。 构建功能可以在构建开始或结束时(在执行构建步骤之前或之后)将缓存标记为无效,具体情况如下:
在开始时:
在末尾:
如果使用此缓存的构建步骤列表已更改
如果项目依赖列表已更改
当构建功能遇到无效缓存时,它会清除该缓存,并在构建结束后重新发布新版本。
- 使用
构建功能会将经过验证的缓存中的文件解压到受跟踪的存储库中,将现有文件结构与缓存的文件结构合并。 如果在实际构建步骤开始之前缓存被标记为无效,则此构建将在不使用缓存的情况下运行,并重新下载所有所需的依赖项。 这些新的依赖项将用于在此构建结束时发布的更新缓存。
依赖和包缓存在单次构建后终止的短期代理上最为有效,因为它们避免了从其他构建中累积依赖项。 对于长期或永久代理,请定期检查
.teamcity.build_cache/depcache_***_cacheRoot_***.tar
隐藏制品 以监控缓存大小和内容。 每个依赖目录都存档在其自己的缓存中,因此您的构建可以发布多个存档。 如果由于冗余依赖项导致缓存过大,请考虑禁用此功能。仅当构建成功时,缓存才会发布。 有关更多信息,请查看此工单: TW-89838。
要为 在容器中运行的构建 启用依赖缓存,请设置
-v <dependency_directory>:<dependency_directory>
卷。某些构建配置设置依赖于生成“虚拟”构建。 例如,当使用 并行测试 或 矩阵构建 时,每个测试批次或参数组合都会在单独的构建中运行。 这些动态生成的构建中的每一个都会发布相同的缓存。 请参考以下工单获取更多信息: TW-89837。
构建功能支持所有三种本地 Maven 仓库类型:每代理、每构建和 Maven 默认。
如果在 Linux Docker 容器中运行的构建会生成和使用缓存,请将 制品存储 Maven 设置为“每代理”(默认值)或“每构建配置”。 否则,以普通用户身份运行的 TeamCity 服务器可能没有足够的权限访问在以“root”用户身份执行的 Docker 容器步骤中发布的缓存。
构建功能调用
dotnet list package --format=json --output-version=1 --include-transitive
命令来分析项目依赖并检测无效缓存。--格式化
参数在 .NET SDK 7.0.200 及更高版本中可用,这意味着构建功能无法在使用较旧 SDK 版本的代理上运行。不支持对通过 MSBuild 特定方式设置包位置的环境进行缓存:
通过 MSBuild 命令行
在项目文件中
在
Directory.Build.Props
文件中
以下示例说明了如何在 Kotlin DSL 中添加依赖缓存功能。
object Build : BuildType({
name = "Build"
features {
// ...
gradleCache {}
mavenCache {}
nugetCache {}
}
// ...
})